﻿<HTML><HEAD><TITLE>GRUB4DOS 命令索引</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.2900.3059" name=GENERATOR>
<link href="cmd.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<table align="center">  <TR><TD width="all"><h2>GRUB4DOS 命令索引:</h2></TD></TR>
</table>
<TABLE align="center" frame=box rules=all>
  <TBODY>
  <TR>
    <TD><span class="style1"><A href="#background">background</A></span></TD>
    <TD width="534"><span class="style1">设置图形模式下的背景色。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#blocklist">blocklist</A></span></TD>
    <TD><span class="style1">输出文件的块清单标记。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#boot">boot</A></span></TD>
    <TD><span class="style1">引导已加载的操作系统或扇区链式加载器。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#calc">calc</A></span></TD>
    <TD><span class="style1">简单的计算器。</span></TD>
  </TR>  
  <TR>
    <TD><span class="style1"><A href="#call">call</A></span></TD>
    <TD><span class="style1">批处理专用命令，跳转到指定标签执行，语法与MS-DOS中 call 语法几乎相同。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#cat">cat</A></span></TD>
    <TD><span class="style1">显示指定文件的内容。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#cdrom">cdrom</A></span></TD>
    <TD><span class="style1">CDROM设备命令。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#chainloader">chainloader</A></span></TD>
    <TD><span class="style1">加载扇区链式加载器。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#checkrange">checkrange</A></span></TD>
    <TD><span class="style1">检查一条命令的返回值是否是在指定的值域或排列中。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#checktime">checktime</A></span></TD>
    <TD><span class="style1">输出当前时间。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#clear">clear</A></span></TD>
    <TD><span class="style1">清屏幕。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#cmp">cmp</A></span></TD>
    <TD><span class="style1">比较两个文件, 并且报告两者之间的不同的信息。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#color">color</A></span></TD>
    <TD><span class="style1">改变菜单的颜色。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#command">command</A></span></TD>
    <TD><span class="style1">声明外部命令位置。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#commandline">commandline</A></span></TD>
    <TD><span class="style1">进入命令行模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#configfile">configfile</A></span></TD>
    <TD><span class="style1">将指定文件作为配置文件予以加载。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#dd">dd</A></span></TD>
    <TD><span class="style1">复制文件。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#debug">debug</A></span></TD>
    <TD><span class="style1">打开/关闭除错模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#default">default</A></span></TD>
    <TD><span class="style1">把 NUM 项菜单设为缺省值。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#delmod">delmod</A></span></TD>
    <TD><span class="style1">删除已加载至内存的外部命令。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#displaymem">displaymem</A></span></TD>
    <TD><span class="style1">显示 GRUB 所判断到的当前系统的内存分布，包括所有物理内存区域。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#echo">echo</A></span></TD>
    <TD><span class="style1">输出指定内容。</span></TD>
  </TR>  
  <TR>
    <TD><span class="style1"><A href="#errnum">errnum</A></span></TD>
    <TD><span class="style1">返回错误值。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#errorcheck">errorcheck</A></span></TD>
    <TD><span class="style1">打开/关闭或显示错误检查模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#exit">exit</A></span></TD>
    <TD><span class="style1">批处理专用命令，中断批处理的执行，推出批处理，语法与MS-DOS中 call 语法几乎相同。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#fallback">fallback</A></span></TD>
    <TD><span class="style1">如果调用当前的菜单项时出现错误，则转移到 NUM 项后重试。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#find">find</A></span></TD>
    <TD><span class="style1">在所有分区上查找文件名, 并显示包含该文件的设备。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#fontfile">fontfile</A></span></TD>
    <TD><span class="style1">指定中文字体文件，并切换到简体中文显示方式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#foreground">foreground</A></span></TD>
    <TD><span class="style1">设置图形模式下的前景色。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#fstest">fstest</A></span></TD>
    <TD><span class="style1">切换文件系统的试验模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#geometry">geometry</A></span></TD>
    <TD><span class="style1">输出驱动器的相关信息。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#gfxmenu">gfxmenu</A></span></TD>
    <TD><span class="style1">使用 FILE 中的图形菜单。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#goto">goto</A></span></TD>
    <TD><span class="style1">跳转到指定标签执行，语法与MS-DOS中 goto 语法几乎相同。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#graphicsmode">graphicsmode</A></span></TD>
    <TD><span class="style1">改变图形模式，默认的是640x480模式，可改800x600模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#halt">halt</A></span></TD>
    <TD><span class="style1">关闭系统。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#help">help</A></span></TD>
    <TD><span class="style1">显示内部命令的帮助信息。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#hiddenflag">hiddenflag</A></span></TD>
    <TD><span class="style1">分区隐藏标记。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#hiddenmenu">hiddenmenu</A></span></TD>
    <TD><span class="style1">隐藏菜单。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#hide">hide</A></span></TD>
    <TD><span class="style1">通过在分区类型上置隐藏标志，隐藏指定分区。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#if">if</A></span></TD>
    <TD><span class="style1">用于判断，同MS-DOS下的if。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#initrd">initrd</A></span></TD>
    <TD><span class="style1">加载Linux格式的初始化虚拟盘, 并设置必要的参数。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#insmod">insmod</A></span></TD>
    <TD><span class="style1">加载外部命令至内存，无需再读取源文件。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#is64bit">is64bit</A></span></TD>
    <TD><span class="style1">检测CPU 64位支持。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#kernel">kernel</A></span></TD>
    <TD><span class="style1">尝试载入主引导影像文件。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#lock">lock</A></span></TD>
    <TD><span class="style1">如果用户未被认证，则终止命令的执行。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#ls">ls</A></span></TD>
    <TD><span class="style1">列表文件或目录。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#makeactive">makeactive</A></span></TD>
    <TD><span class="style1">将 root 设备置为活动分区。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#map">map</A></span></TD>
    <TD><span class="style1">对设备进行映射。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#md5crypt">md5crypt</A></span></TD>
    <TD><span class="style1">产生一个 MD5 格式的密码。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#module">module</A></span></TD>
    <TD><span class="style1">对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#modulenounzip">modulenounzip</A></span></TD>
    <TD><span class="style1">与 'module' 类似, 但是自动禁用了解压缩。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#outline">outline</A></span></TD>
    <TD><span class="style1">图形模式下为了避免字符被背景图片淹没，给字符加上轮廓，使字符容易与背景区分。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#pager">pager</A></span></TD>
    <TD><span class="style1">没有参数时，切换满屏暂停显示方式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#partnew">partnew</A></span></TD>
    <TD><span class="style1">创建一个新的主分区。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#parttype">parttype</A></span></TD>
    <TD><span class="style1">改变指定分区(PART)的分区类型(TYPE)。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#password">password</A></span></TD>
    <TD><span class="style1">设置密码。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#pause">pause</A></span></TD>
    <TD><span class="style1">暂停命令的运行，并给出一段信息。任意键按下后，将继续。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#pxe">pxe</A></span></TD>
    <TD><span class="style1">pxe设备命令。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#quit">quit</A></span></TD>
    <TD><span class="style1">从grub4dos退回到DOS。只有从DOS执行grub.exe进入grub 环境时才能使用该命令。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#read">read</A></span></TD>
    <TD><span class="style1">从内存的指定位置读取一个 32-bit 的值，并以十六进制形式显示出来。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#reboot">reboot</A></span></TD>
    <TD><span class="style1">重启系统。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#root">root</A></span></TD>
    <TD><span class="style1">设置根分区。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#rootnoverify">rootnoverify</A></span></TD>
    <TD><span class="style1">类似'root'指令, 但不测试该分区文件格式是否被支持。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#savedefault">savedefault</A></span></TD>
    <TD><span class="style1">将当前项设置为默认的引导项。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#serial">serial</A></span></TD>
    <TD><span class="style1">初始化一个串口设备。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#set">set</A></span></TD>
    <TD><span class="style1">设定变量。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#setkey">setkey</A></span></TD>
    <TD><span class="style1">改变键盘映射关系。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#setvbe">setvbe</A></span></TD>
    <TD><span class="style1">在系统核心运行前被用来改变视频模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#splashimage">splashimage</A></span></TD>
    <TD><span class="style1">图形模式下载入背景图片文件。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#terminal">terminal</A></span></TD>
    <TD><span class="style1">选择一个终端。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#terminfo">terminfo</A></span></TD>
    <TD><span class="style1">指定终端的功能。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#testvbe">testvbe</A></span></TD>
    <TD><span class="style1">测试所指定(MODE)的 VBE 模式。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#timeout">timeout</A></span></TD>
    <TD><span class="style1">设置在自动启动缺省菜单前所等待的秒数。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#title">title</A></span></TD>
    <TD><span class="style1">命名菜单项。</span></TD>
  </TR>  
  <TR>
    <TD><span class="style1"><A href="#tpm">tpm</A></span></TD>
    <TD><span class="style1">初始化TPM（可信赖平台模块）的缓存。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#unhide">unhide</A></span></TD>
    <TD><span class="style1">通过清除隐藏标志，解除指定分区(PARTITION)的隐藏。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#uuid">uuid</A></span></TD>
    <TD><span class="style1">显示设备的 uuid 号。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#vbeprobe">vbeprobe</A></span></TD>
    <TD><span class="style1">侦测 VBE 的信息。</span></TD>
  </TR>
  <TR>
    <TD><span class="style1"><A href="#write">write</A></span></TD>
  <TD><span class="style1">将字符串写入设备或文件中。</span></TD>
  </TR></TBODY></TABLE>
<HR>

<H2><A name=background>background</A></H2>
<p><B>用法: </B>background 
  RRGGBB<BR>
  <B>描述:</B><BR><br>set the background color when in graphics mode. RR is red,GG is green,and BB is blue.Numbers must be in hexadecimal.</p>
<p class="style1">
设置图形模式下的背景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六进制的值。需配合 foreground 和 unifont 命令共同使用。unifont 用来加载中文支持，background 为背景色，foreground 为前景色。</p>
<HR>

<H2><A name=blocklist>blocklist</A></H2>
<p><B>用法: </B>blocklist 
  FILE<BR>
  <B>描述:</B><BR><br>print the blocklist notation of the file FILE
</p>
<p>输出文件的块清单标记。 </p>
<HR>

<H2><A name=boot>boot</A></H2>
<p><B>用法: 
  </B>boot<BR>
  <B>描述:</B><BR><br>boot the OS/chain-loader which had been loaded
</p>
<p class="style1">引导已加载的操作系统或扇区链式加载器。 <br>
确定进行启动用，通常和chainloader命令搭配使用，在菜单文件中可以省略，命令行模式下需要。</p>
<p> 例：</p>
<p> 菜单文件中示例：</p>
<blockquote>
  <p><span class="bat">title boot iso<br>
    map --mem /iso.iso (0xff)<br>
    map --hook<br>
    chainloader (0xff)</span></p>
</blockquote>
<p>命令行中实现同样效果：</p>
<blockquote>
  <p><span class="cmd">grub&gt; map --mem /iso.iso (0xff)&nbsp;&nbsp;</span><br>
    <span class="cmd">grub&gt; map --hook&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">grub&gt; chainloader (0xff)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">grub&gt; boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
  </p>
</blockquote>
<HR>

<H2><A name=calc>calc</A></H2>
<p><B>用法: </B>calc [*INTEGER=] [*]INTEGER OPERATOR [[*]INTEGER]<BR>
  <B>描述:</B></p>
<p>(by zhaohj@wuyou)</p>
<p>
this is a simple calculator and from left to right only</p>
<p>
这是一个简单的计算器，只能从左至右进行计算,从左到右计算，不支持优先级。</p>
<p> 操作符： <span class="Options">+(加)、 -(减)、 *(乘)、 /(除)、 %(余)、 &lt;&lt;(左移)、 &gt;&gt;(右移)、 &amp;(与)、 |(或)、 ^(位异或)</span></p>
<p>%(余)操作：</p>
<blockquote>
  <p>7%2=1</p>
</blockquote>
<p>&lt;&lt;(左移)操作：</p>
<blockquote>
  <p>1&lt;&lt;10=1024，相当于2的10次方；左移一位等于*2</p>
</blockquote>
<p>&gt;&gt;(右移)操作：</p>
<blockquote>
  <p>1024&gt;&gt;10=1,右移一位等于/2<br>
    1024=2进制10000000000,这样一看就明白了。</p>
</blockquote>
<p>&amp;(与)操作：</p>
<blockquote>
  <p>相同位都为1时为1<br>
    1&amp;1=1<br>
    1&amp;0=0<br>
    0&amp;0=0</p>
</blockquote>
<p>^(位异或)操作：</p>
<blockquote>
  <p>相同位相反时为1<br>
    1^1=0<br>
    1^0=1<br>
    0^0=0</p>
</blockquote>
<p>|(或)操作：</p>
<blockquote>
  <p>相同位有1时为1<br>
    1|1=1<br>
    1|0=1<br>
    0|0=0<br>
  </p>
</blockquote>
<p>例1：内存变量操作</p>
<blockquote>
  <p><span class="cmd">calc *0x8208=*0x82a0</span><br>
    <span class="cmd">calc *0x8280=*0x829c</span></p>
</blockquote>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;0x82a0保存的是当前根所在的驱动器(current root drive)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;0x829c保存的是当前根分区号(current root partition)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;0x8208保存的是启动分区号(the boot partition)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;0x8280保存的是启动驱动器号(boot_drive)</p>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;实现了把当前设备保存到启动设备的功能</p>
<p>例2：混合操作</p>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;计算物理硬盘数<br>
&nbsp;&nbsp;&nbsp;&nbsp;0x475的低2字节保存的是物理硬盘数，所以要去掉高2字节</p>
<blockquote>
  <p><span class="cmd">calc *0x475&amp;0xff</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;如果保存到变量hdn,用 <span class="cmd">set /a hdn=*0x475&amp;0xff</span></p>

<p><br>
  <a href="#set">set命令的 <span class="Options">/a 参数</span></a>调用的是calc命令。</p>
<p>另外要注意的是，复合语句，执行时是一次性替换整条命令的变量的；复合语句也算一条语句</p>
<blockquote>
  <p><span class="bat">set /a m=8<br>
    set /a n=2<br>
    set /a n=%m%-%n% &amp;&amp; set /a m=%n%/2 &amp;&amp; set /a n=%n%-%m%</span></p>
</blockquote>
<p>
  与下面计算结果不同：</p>
<blockquote>
  <p><span class="bat">set /a m=8<br>
    set /a n=2<br>
    set /a n=%m%-%n%<br>
    set /a m=%n%/2<br>
    set /a n=%n%-%m%</span></p>
</blockquote>
<HR>

<H2><A name=call>call</A></H2><B>用法: </B>call [:]LABLE [%1 %2 ... %9]<BR><B>描述:</B><BR><br>
<p class="style1"> 0.4.5版grub4dos增加批处理支持，call语法和MS-DOS的批处理几乎一模一样。<br>
call 命令可以使批处理执行时跳转到指定的 LABLE 标签执行， LABLE 标签执行后返回原处继续向下执行，<br>
与call命令的差别是，在批处理中使用 goto 命令直接转换 LABLE 标签处执行不会返回原处。<br>
注意: GRUB4DOS的CALL和GOTO是和批处理一样的机制.<br>
此外 call 支持附加参数， goto不支持。</p>
<blockquote>
  <p><br>
    =========GRUB4DOS BATCH SCRIPT START===============================
  </p>
  <p class="bat">
    !BAT #注：文件头!BAT是必须的用于识别这是一个GRUB4DOS批处理脚本<br>
    echo %0<br>
    echo Your type: %1 %2 %3 %4 %5 %6 %7 %8 %9<br>
    call :echo This is a test string<br>
    goto :label2<br>
    :label1<br>
    echo %1 %2 %3 %4 %5 %6 %7 %8 %9<br>
    goto :eof<br>
    :label2<br>
    echo end of batch script.</p>
  <p>
    =========GRUB4DOS BATCH SCRIPT END===============================
  </p>
  </p>
</blockquote>
<p> 假定此批处理文件名为 test 则</p>
<blockquote>
  <p><span class="cmd">grub&gt; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">Your type:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">This is a test string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">end of batch script.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
  <p><span class="cmd">grub&gt; test this is only a test&nbsp;&nbsp;</span><br>
    <span class="cmd">test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">Your type: this is only a test&nbsp;&nbsp;</span><br>
    <span class="cmd">This is a test string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">end of batch script.&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
</blockquote>
<HR>

<H2><A name=cat>cat</A></H2><B>用法: </B>cat [--hex] [--sikp=S] [--length=L] [--locate=STRINT] [locate-align=A] [--replace=STRING] [--number=N] FILE<BR><B>描述:</B><BR><br>  print the contents of the file FILE, or print the locations of the string STRING in FILE</p>
<p>
  显示指定文件FILE的内容，或显示指定文件FILE中字符串STRING的位置。</p>
<p>
  参数说明：</p>
<p>
  <span class="Options">--hex</span> :显示16进制</p>
<p>
  <span class="Options">--skip=S</span> :跳过的字节数</p>
<p>
<span class="Options">--length=L</span> :长度</p>
<p>
  <span class="Options">--locate=STRING</span> :定位，字符串区分大小写，最长16个字节</p>
<p>
  <span class="Options">--locate-align=A</span> :对齐方式</p>
<p>
  <span class="Options">--replace=STRING</span> :替换字符串，最长16个字节</p>
<p>
  <span class="Options">--number=N</span> :搜索的个数</p>
<p>cat 命令既不扩大也不减小目标文件的大小，源文件尾部剩余的部分将被丢弃。</p>
<p>
  新版本与老版本的区别：新版本在debug off状态下都提供显示输出，老版本(2011.01前)在非debug off下显示输出。</p>
<p>
  例子：</p>
<p>
  1：十六进制格式显示 NTLDR 文件内容</p>
<blockquote>
  <p><span class="cmd">cat --hex (hd0,0)/NTLDR</span></p>
</blockquote>
<p>2：十六进制格式显示 MBR 扇区</p>
<blockquote>
  <p><span class="cmd">cat --hex  (hd0)+1</span></p>
</blockquote>
<p>3：十六进制格式显示内存起始地址处的1 KB内容(实际上就是实模式的IDT表)</p>
<blockquote>
  <p><span class="cmd">cat --hex  (md)+2</span></p>
</blockquote>
<p>4：十六进制格式显示扩展内存的第一个扇区</p>
<blockquote>
  <p><span class="cmd">cat --hex  (md)0x800+1</span></p>
</blockquote>
<p>5：十六进制格式显示(hd0,0)分区的第一扇区，通常这个扇区包含操作系统的引导记录</p>
<blockquote>
  <p><span class="cmd">cat --hex  (hd0,0)+1</span></p>
</blockquote>
<p>
  6：搜索文本中从指定位置开始指定范围的第一个字符串的位置</p>
<blockquote>
  <p><span class="cmd">cat --skip=0x200 --length=2048 --locate=ABCD --number=1</span></p>
</blockquote>
<p> 7：可以用来判断文件 FILE 是否存在。</p>
<blockquote>
  <p><span class="cmd">cat --length=0 /FILE</span></p>
</blockquote>
<p>8：固定用法，获取当前分区偏移。</p>
<blockquote>
  <p><span class="cmd">cat --length=0 ()-1</span></p>
</blockquote>
<p>
  9: 一个高级用法，配合批处理，搜索文本中指定字符串的段落名%scsi%</p>
<p>
     以下文本名为(fd1)/OEM,包含下面段落</p>
<p>
......</p>
<p>
<strong>[HardwareIds.scsi.lsi_sas]<br>
id = "PCI\VEN_1000&DEV_0050", "lsi_sas"<br>
id = "PCI\VEN_1000&DEV_0054", "lsi_sas"<br>
id = "PCI\VEN_1000&DEV_0058", "lsi_sas"<br>
id = "PCI\VEN_1000&DEV_005E", "lsi_sas"<br>
id = "PCI\VEN_1000&DEV_0056", "lsi_sas"<br>
id = "PCI\VEN_1000&DEV_005A", "lsi_sas"<br>
id = "PCI\VEN_1000&DEV_0062", "lsi_sas"</strong><br>
......</p>
<p>
现在只知道ID是PCI\VEN_1000&DEV_0058，要取出HardwareIds.scsi.lsi_sas</p>
<p>
用批处理：</p>
<blockquote>
  <p>
    <span class="bat">!BAT<br>
    set ID=PCI\VEN_1000&DEV_0058<br>
    cat --locate=%ID:~-16% --number=1 (fd1)/OEM | set a=<br>
    set a && set a=0x%a% ! exit<br>
    cat --length=%a% --locate=[ (fd1)/OEM | call :get_last<br>
    set /a b=0x%last%+1<br>
    cat --length=%a% --locate=] (fd1)/OEM | call :get_last<br> 
    set /a a=0x%last%-%b%<br>
    cat --skip=%b% --length=%a% (fd1)/OEM | set scsi=<br>
    &nbsp;&nbsp;&nbsp;&nbsp;......<br>
    :get_last<br>
    if "%1"=="" exit<br>
    shift<br>
    if "%1"=="" set last=%0<br>
    goto :get_last</span></p>
</blockquote>
<p>
<HR>

<H2><A name=cdrom>cdrom</A></H2><B>用法: </B>cdrom --add-io-ports=P | --init | --stop<BR><B>描述:</B><BR><br>  
<span class="style1">initialise/stop atapi cdroms or set additonal I/O ports for a possible atapi cdromdevice. The high word of P specifies the base register of the control block registers,and the low word  of P specifies the base register of the command block registers.</span>
<p>
  
&nbsp;&nbsp;&nbsp;&nbsp; 1. 初始化ATAPI接口的CDROM设备：</p>
<blockquote>
  <p><span class="cmd">grub> cdrom --init</span></p>
</blockquote>
<p>
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示找到的atapi接口的cdrom光驱的数目：参数为 atapi_dev_count</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;2. 停止ATAPI接口的CDROM设备：</p>
<blockquote>
  <p><span class="cmd">grub> cdrom --stop</span></p>
</blockquote>
<p>
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这会设置参数atapi_dev_count为0 。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;3. 增加搜索atapi cdrom设备的IO端口。例如：</p>
<blockquote>
  <p><span class="cmd">grub> cdrom --add-io-ports=0x03F601F0</span></p>
</blockquote>
<p>
  
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在执行'cdrom --init'以及'map --hook'命令后，cdrom光驱可以通过(cd0), (cd1), ...等设备号来访问。<br>
</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 1：如果系统不完全支持ATAPI CD-ROM 规范，在你试图访问这些（cdX）设备时将遭遇失败。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 2：在执行一条'cdrom --stop'命令后，你应当使用一条'map --unhook'命令。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;当然，你可以再次使用`map --hook'命令，假如还有驱动器被映射着的话。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 3：在增加IO端口之后，你应当接着`cdrom --init'执行一条`map --unhook'命令</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;然后再接着执行一条`map --hook'命令。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认将使用这些端口来搜索cdrom设备（因此不需要再添加了）</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03F601F0, 0x03760170, 0x02F600F0,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03860180, 0x6F006B00, 0x77007300.</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 4：BIOS可能已经提供了cdrom 的接口。它的设备号总是（cd）。在 `cdrom --init' </p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;和 `map --hook' 执行后，我们可以有我们自己有效的(cd0), (cd1), ...等设备。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 5：你可以用块列表的方式去访问(cd)和 (cdX) 等设备。例子:</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cat --hex (cd0)16+2</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cdrom 扇区是大小为 2048 字节的大扇区。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 6：我们的iso9660文件系统驱动具有Rock-Ridge扩展支持，但没有Joliet扩展支持。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;因此当你试图在一个使用Joliet扩展的光盘上读取文件时，可能遭遇失败。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意 7：现在，（cd）及 （cdX）设备可以被引导了。示例：</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chainloader (cd)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boot</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chainloader (cd0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boot</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chainloader (cd1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boot</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;在chainloader (cd)之前，你必须保证已经可以访问该设备。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDROM 驱动器上发现的缺陷</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;似乎 cdrom 应当连接在IDE控制器的主设备通道上。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;如果 cdrom 是从设备，读取cdrom扇区的驱动将失败。</p>
<p>
<BR>
<HR>

<H2><A name=chainloader>chainloader</A></H2><B>用法: </B>chainloader [--force] [--load-degment=LS] [--load-offset=LO] [--load-length=LL] 
[--skip-length=SL] [--boot-cd=CS] [--boot-ip=IP] [--ebx=EBX] [--edx=EDX] [--sdi] 
[--disable-a20] FILE<BR><B>描述:</B><BR><br>  
<span class="style1">load the chain-loader FILE, if --force is specified, then load it forcibly, whether the boot loader signature is present or not. LS:LO specifies the load address other than 0000:7C00. LL specifies the length of the boot image(between 512 and 640K). CS:IP specifies the address where the boot image will gain control. EBX:EDX specifies the EBX:EDX register value when the boot image gets control.Use --sdi if FILE is a System Deployment Image, which is of the Windows XP RAM boot file format.Use --diable-a20 if you wish to turn off A20 when transferring control to the boot image.SL specifies length in bytes at the beginning of the image to be skipped when loading.</span><br>

<p> 加载扇区链式加载器。
<p> &nbsp;&nbsp;&nbsp;&nbsp;若使用了<span class="Options">--force</span>参数, 则忽略该扇区的启动标识的有效性，强制启动。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;使用0000:7C00地址以外的的启动地址的话，需要使用<span class="Options">LS:LO</span>参数指定。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">LL</span> 指定引导映像的长度（在512和640K大小之间）。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">SL</span> 在启动镜像时，将会忽略文件头指定的字节长度。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">CS:IP</span> 指定将获得控制权的引导映像的地址。 </p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">EBX:EDX</span> 在引导映像获得控制权后指定EBX:EDX寄存器的值。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;如果 FILE 是一个系统部署，即Windows XP RAM启动文件格式，需要使用<span class="Options"> --sdi</span> 参数。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;使用 <span class="Options">--disable-a20</span> 参数，将会在把控制权移交给引导映像时关闭A20总线。</p>
<p> 当你使用 chainloader 命令装载一个pxe 设备上的文件时，有一个选项你可以使用：</p>
<blockquote>
  <p><span class="cmd">chainloader --raw (pd)/BOOT_FILE</span></p>
</blockquote>
<p> 选项 <span class="Options">--raw</span> 的执行就和--force一样，但是它是一次性将文件装载执行。这可以改善一些情况下的执行效率。</p>
<p> 例1：</p>
<blockquote>
  <p><span class="cmd">chainloader /ntldr</span><br>
    #加载 ntldr 文件启动</p>
  <p><span class="cmd">chainloader (hd0,0)+1</span><br>
    #加载启动第一硬盘第一主分的第一扇区</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意： 命令行下使用该命令后还需再执行 boot 命令才会真正启动。
<p>例二：
<p>&nbsp;&nbsp;&nbsp;&nbsp;直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及FreeDOS 的 KERNEL.SYS. 
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如：
<blockquote>
  <p><span class="cmd">chainloader  --edx=0xPPYY (hd0,0)/ntldr&nbsp;</span><br>
    <span class="cmd">boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <br>
    <span class="cmd">chainloader --edx=0xYY  (hd0,0)/io.sys&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <br>
    <span class="cmd">chainloader --ebx=0xYY  (hd0,0)/kernel.sys</span><br>
    <span class="cmd">boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
</blockquote>
<p><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;十六进制的YY 指定了启动驱动器号，十六进制的PP指定了 NTLDR 的启动分区号。如果启动驱动器是软驱，PP应该是一个十六进制的值ff,即十进制的255.<br>
  </span><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行，请使用--ebx 。当文件位于它们平常的位置时，选项 --edx (--ebx)可以省略。但某些情况下，这些选项是必需的。</span><br>
<span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，假设被调用的ntldr文件在ext2分区(hd2,8)中，而你又希望它认为(hd0,7)的 windows 分区是启动分区，那么--edx就是必需的：</span>
<blockquote>
  <p><span class="cmd">chainloader  --edx=0x0780 (hd2,8)/ntldr</span></p>
</blockquote>
<p><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于DOS核心（即，IO.SYS和KERNEL.SYS）,启动分区号是没有意义的，因此你只需指定恰当的启动驱动器号YY（不过指定了启动分区号也是无害的）。</span><br>
  <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命令来指定。 </span>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如：
<blockquote>
  <p><span class="cmd">chainloader  (hd2,6)/kernel.sys&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">rootnoverify  (hd0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; &nbsp;&lt;-------- YY=80<br>
    <span class="cmd">boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <br>
    <span class="cmd">chainloader  (hd0,0)/ntldr&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">rootnoverify  (hd0,5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; &nbsp;&lt;-------- YY=80, PP=05<br>
    <span class="cmd">boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
  </p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提示：CMLDR （the ComMan LoaDeR,它被用于加载Windows的故障恢复控制台）可以像NTLDR一样被良好的加载。<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bean 先生成功地解压和启动了WinME的IO.SYS，感谢这个出色的工作。<br>
<br>
<HR>

<H2><A name=checkrange>checkrange</A></H2><B>用法: </B>checkrange RANGE COMMAND<BR><B>描述:</B><BR><br>  
return ture if the return value of COMMAND is in RANGE and false otherwise.</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;Checkrang 命令检查一条命令的返回值是否是在指定的值域或排列中。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;Usage:		checkrange  RANGE  COMMAND<br>
&nbsp;&nbsp;&nbsp;&nbsp;用法:           checkrange   域    命令</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;这里是参数 RANGE 的一些示例：</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 是仅包含数字 3 的值</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3:3 等价于 3 </p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3:8 是一个包含数字3, 4, 5, 6, 7, 8的值域</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,4,5,6,7,8 等同于3:8</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3:5,6:8 也等同于3:8</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,4:7,8 也等同于3:8</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;注意：你不能把空格放在值域中。比如：以下是错误的。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkrange 1 2 COMMAND</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;这里用一个示例来演示怎样使用 checkrange 命令：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;例一：</p>
<blockquote>
  <p><span class="cmd">checkrange 0x05,0x0F,0x85 parttype (hd0,1) || hide (hd0,1)</span></p>
</blockquote>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这意谓着：如果 (hd0,1) 不是一个扩展分区，那么执行hide (hd0,1)命令隐藏它。
  
<p>&nbsp;&nbsp;&nbsp;&nbsp;例二：
<blockquote>
  <p><span class="cmd">checkrange 0x21 read 0x8280 &amp;&amp; pxe detect NotExist</span>
  </p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;判断是否为PXE启动，如果是PXE启动，指定一个不存在的配置文件&ldquo;NoExist&rdquo;，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;让PXE启动时不去搜索PXE服务器上的其他配置文件，加快启动速度（pseudo 发明的写法）。<br>
</p>
<HR>

<H2><A name=checktime>checktime</A></H2>
<B>用法: </B>checktime [[min] [hour] [dom] [month] [dow]]<BR><B>描述:</B><BR><br>
check time.</p>
<p>
  直接执行为输出本地当前时间。<p>命令格式如下：
<p>checktime * * * * *</p>
<blockquote>
  <p>checktime后面的五个参数分别表示分钟，小时，日期，月份和星期几。</p>
  <p>'<span class="Options">*</span>'表示全范围，你也可以使用数字，</p>
  <p>用'<span class="Options">-</span>'表示某一范围，</p>
  <p>用'<span class="Options">/</span>'表示每隔一定数字取一个值，具体的用法可以查看一下crontab的语法。</p>
</blockquote>
<p>如：</p>
<blockquote>
  <p>1-4<br>
    2,5-6<br>
    1-2,4-5,7<br>
    */2</p>
</blockquote>
<p>checktime本身只是一个测试函数，它判断当前时间是否符合参数的指定。</p>
<p>但把它和&amp;&amp;相结合，你就可以使得某些命令只有在一定的条件下才会执行，例如：</p>
<p>1、上午使用第一项作为缺省项，下午使用第二项</p>
<blockquote>
  <p>checktime * 0-12 * * * &amp;&amp; default 0<br>
    checktime * 13-23 * * * &amp;&amp; default 1</p>
</blockquote>
<p>2、四季使用不同的背景图片</p>
<blockquote>
  <p>checktime * * * 1-3 * &amp;&amp; splashimage /spring.xpm<br>
    checktime * * * 4-6 * &amp;&amp; splashimage /summer.xpm<br>
    checktime * * * 7-9 * &amp;&amp; splashimage /fall.xpm<br>
    checktime * * * 10-12 * &amp;&amp; splashimage /winter.xpm</p>
</blockquote>
<HR>

<H2><A name=clear>clear</A></H2><B>用法: </B>clear<BR><B>描述:</B><BR><br>  clear the screen</p>
<p>
  清屏幕。
<p class="style1">另类用法： 在菜单中生成一行不可被选中的&quot;空行&quot;。（并非clear才会有这样的效果，只要该菜单项目中没有启动敏感的命令都会使得菜单不可选择，只不过使用clear命令误操作时不会造成不良后果）
<p>如原菜单：
<blockquote>
  <p class="bat">title boot xp<br>
    ……<br>
    boot
  </p>
  <p class="bat">title boot win7<br>
    ……<br>
    boot
  </p>
</blockquote>
<p>新菜单：
<blockquote>
  <p><span class="bat">title boot xp<br>
    ……<br>
    boot
    </span>
  </p>
  <p class="Options">title<br>
    clear
  </p>
  <p class="bat">title boot win7<br>
    ……<br>
    boot
  </p>
</blockquote>
<p>这样生成的菜单将会在这两个菜单项中加入一行&quot;空行&quot;
<HR>

<H2><A name=cmp>cmp</A></H2><B>用法: </B>cmp [--hex] FILE1 FILE2<BR><B>描述:</B><BR><br>compare the file FILE1 with the FILE2 and inform the different values if any.</p>
<p>
比较两个文件, 并且报告两者之间的不同的信息。
<p>使用 <span class="Options">--hex</span> 参数时将会以十六进制形式比较两个文件的不同。
<HR>

<H2><A name=color>color</A></H2><B>用法: </B>color NORMAL [HIGHLIGHT [HELPTEXT [HEADING]]]<BR><B>描述:</B><BR><br>  
<span class="style1">change the menu colors. The lolor NORMAL is used for most lines in the menu, and the color HIGHLIGHT is used to highlight the line where the cursor points. if you omit HIGHLIGHT, then the inverted color of NORMAL is used for the higlighted line. if you omit HELPTEXT and/or HEADING, then NORMAL is used. The format of a color is "FG/BG". FG and BG are black,blue,green,cyan,red,magenta,brown,light-gray,dark-gray, light-blue,light-green,light-cyan,light-red,light-magenta,yellow and white. you can prefix "blink-" to FG if you want a blinking foreground color.</span>
<p>
改变菜单的颜色。</p>
<p class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">Normal</span> 用于指定菜单项的未选中时的颜色，<span class="Options">HIGHLIGHT</span> 则用于指定菜单项的被选中时的颜色。如果你未指定 HIGHLIGHT 色，那么我们将使用 NORMAL 的反色值。颜色值的格式是 "FG/BG"。<br>
<span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FG 和 BG 是颜色的名称，如下：black(黑), blue(蓝), green(绿), cyan(青), red(红), magenta(粉红),brown(棕), light-gray(亮灰),dark-gray(暗灰), light-blue(浅蓝), light-green(淡绿), light-cyan(淡青), light-red(明红), light-magenta(浅红), yellow(黄) 和 white(白)。注意，BG 的值只能是前八个。<br>
</span><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另外，若想使用闪烁的前景色，你在 FG 前使用前缀 "blink-" 即可。</span></p>
<HR>

<H2><A name=command>command</A></H2><B>用法: </B>command [--set-path=PATH] FILE [ARGS]<BR><B>描述:</B><BR><br>
<p class="style1"> 执行外部命令用。<br>
命令行模式下执行 command  将输出当前指定的外部命令位置（<span class="Options">默认为 (bd)/BOOT/GRUB/</span> ）。<br>
可以在菜单文件或命令行下使用 <span class="Options">--set-path=PATH</span> 来指定新的外部命令位置，执行外部命令时将会在 PATH 文件夹寻找，该文件夹下未找到将提示 Waring! No such command : 外部命令名。<br>
注意：iso9660模式下区分文件名大小写！<br>
也可以使用 command FILE 来启动外部命令，例 command /GRUB/WENV</p>
<p>查找外部命令的顺序如下:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果是以 '(' 或 '/' 开头的FILE认为是一个绝对路径的文件.直接打开。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;否则</p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp;1.先查找用INSMOD加载的命令。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;2.使用默认位置里面的同名文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;3.使用当前root下的同名文件。</p>
<p> 例：</p>
<blockquote>
  <p><span class="cmd">grub&gt; command</span><br>
    #输出当前外部命令所在文件夹，默认 (bd)/BOOT/GRUB/</p>
  <p><span class="cmd">grub&gt; WENV</span><br>
    #在 /BOOT/GRUB/ 文件夹下寻找名为 WENV 的外部命令，并启动</p>
  <p><span class="cmd">grub&gt; command WENV</span><br>
    #在 /BOOT/GRUB/ 文件夹下寻找名为 WENV 的外部命令，并启动</p>
  <p><span class="cmd">grub&gt; command /BOOT/WENV</span><br>
    #在 /BOOT/ 文件夹下寻找名为 WENV 的外部命令，忽略 --set-path 设定的默认路径/BOOT/GRUB/文件夹。</p>
</blockquote>
<HR>

<H2><A name=commandline>commandline</A></H2><B>用法: </B>commandline<BR><B>描述:</B><BR><br>进入命令行模式。
<HR>

<H2><A name=configfile>configfile</A></H2>
<p><B>用法: </B>configfile 
  FILE<BR>
  <B>描述:</B><BR><br>将指定文件作为配置文件予以加载。</p>
<p>configfile 命令执行后，boot device 和 root device 将同时更新为 FILE 文件所在的设备。<br>
  <span class="style1">如果在预置菜单（内置菜单）的初始化命令组中出现不带任何参数的 configfile 命令，那么控制将转到启动设备上的menu.lst文件。</span><br>
  例：</p>
<blockquote>
  <p><span class="cmd">configfile /MENU.LST</span><br>
    <br>
    #加载当前设备根目录下的配置文件 /MENU.LST</p>
  <p><span class="cmd">configfile (md)4+8</span><br>
    <span class="style1">#特殊用法，内置菜单的位置是公开的，在内存中的固定地址 0x800 处，长度是 4K，即(md)4+8 处内存块，因此，执行此命令后会重新加载一次内置菜单，可作为进入二级或三级或任意菜单后返回主菜单之用。</span></p>
</blockquote>
<HR>

<H2><A name=dd>dd</A></H2><B>用法: </B>dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]<BR><B>描述:</B><BR><br>  
<span class="style1">copy file IF to OF. BS is blocksize,default to 512. C is blocks to copy,default is total blocks in IF. IN specifies number of blocks to skip when read, default id 0. OUT specifies number of blocks to skip when write, default os 0. skipped blocks are not touched. both IF and OF must exist. dd can neither enlarge nor readce the size of OF. the leftover tail of IF will be discarded. OF cannot be a gzipped file. if IF is a gzipped file, it will be decompressed automatically when copying. dd is dangerous, use at your own riak. to be on the safe side, you should only use dd to write a file in memory. ADDR and SIZE are used for user-defined buffer.</span>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复制文件的新命令 'dd'</p>
<p>
  
&nbsp;&nbsp;&nbsp;&nbsp;dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;将 <span class="Options">IF</span>（input file 源文件）复制到 <span class="Options">OF</span> （output file 目标文件）中。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">BS</span> 是以字节计数的一个块的大小，默认值是512 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">C</span> 是复制的块数，默认值是源文件中的总块数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">IN</span> 指定在读取时跳过的块数，默认值是 0 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">OUT</span> 指定在写入时跳过的块数，默认值是0 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">buf</span> 表示dd所用的读写缓存的起始地址。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">buflen</span> 表示缓存的长度，即大小。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注： 1、已跳过的块不会被改变。源文件和目标文件必须是存在的。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、源文件和目标文件必须以设备名开头，即 '(...)' 的格式,对于当前根设备你应该使用'()'。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、dd 命令既不扩大也不减小目标文件的大小，源文件尾部剩余的部分将被丢弃。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、目标文件不能是gzip压缩过的文件。如果源文件是gzip 压缩过的文件，它将在复制时被</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;自动解压。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;注意：1、dd 具有危险性，使用风险由你自己的承担。作为一种安全方面的考虑，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你应当只使用 dd 来写入一个内存中的文件。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、某些情况下在写入NTFS 中的文件的时，dd 可能会失败。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、0.4.5版grub4dos不再限制在菜单中执行 write 命令来写入一个不是内存中的设备或者块文件。</p>
<p>&nbsp;</p>
<p>
更新： 新选项实现了让使用者自定义dd 命令的读写缓存。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;默认读写缓存起始于地址0x50000，长度为0x10000 （即64KB）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;你不能指定起始地址ADDR 低于0x100000（即 1 MB）的缓存位置。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;此外，你必须指定参数SIZE 大于0x10000（即64K）。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;通常，你需要令ADDR大于或等于0x1000000 （16MB），并且 SIZE 也要大于或等于16MB 。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;增大 SIZE 的值能够加快 dd 的读写速度。</p>
<p>

&nbsp;&nbsp;&nbsp;&nbsp;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;	!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;	!!!!    Caution! Both IF and OF can be a device name which stands for&nbsp;&nbsp;&nbsp;!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;	!!!!    all the sectors on the device. Take utmost care!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;	!!!!___________________________________________________!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;        警告！IF 和 OF 都可以是一个设备名，即它代表了设备上全部的扇区。慎之又慎</p>
<p>
<HR>

<H2><A name=debug>debug</A></H2>
<p><B>用法: </B>debug [on | off | normal | status | INTEGER]<BR>
  <B>描述:</B><BR><br>  turn on/off or display/set the debug level</p>
<p>开启/关闭 或 显示/设置 调试级别</p>
<p>
	<span class="Options">0 或者 off</span> 指定为静默模式</p>
<p>
<span class="Options">1 或者 normal</span> 指定为标准模式</p>
<p>
从 <span class="Options">2 到 0x7fffffff 或者 on</span> 指定为冗余模式 (调试报告BUG时请使用该模式,可以获得更详细的信息)</p>
<p>
<HR>

<H2><A name=default>default</A></H2><B>用法: </B>default [NUM | 'saved' | FILE]<BR><B>描述:</B><BR><br>  
<span class="style1">set the default entry to entry number NUM (if not specified, it is 0, the first entry), or to the entry number saved by savedefault if the key word 'saved' is specified, or to the entry number previously saved in the specified file FILE. when FILE is specified, all subsequent 'savedefault' commands will save default entry numbers into FILE. </span>
<p><span class="style1">设置默认启动的菜单入口项为 NUM (0 代表第一项)，或者由 savedefault 所保存的入口项（如果指定了关键字 saved），或者先前保存在文件 FILE 中的入口项。当指定了 FILE 时，后续的 savedefault 命令都将把入口项 保存到 FILE 中。</span>
<p>相对于原来的用法&quot;default NUM&quot;及&quot;default saved  &quot;增加的部分，现在有一个新用法&quot;default  FILE&quot;，象这样:
<blockquote>
  <p><span class="cmd">default (hd0,0)/default</span></p>
</blockquote>
<p>注意参数FILE必须是一个有效的DEFAULT文件格式。一个简单的DEFAULT文件就包含在发行版中。
<p>你可以复制它到你希望的地方，但是你应该避免手工修改它的内容。
<p>  DEFAULT文件可以按以下方法使用： <br>
  <br>
  &nbsp;&nbsp;&nbsp; 首先，你要复制一个格式有效的default文件到你运行的系统上。<br>
  <br>
&nbsp;&nbsp;&nbsp; 其次，你要使用GRUB中的&quot;default  FILE&quot;命令来表明是使用这个FILE作为我们新
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 的预设文件，以便&quot;savedefault&quot;命令执行时写入它。<br>
  <br>
&nbsp;&nbsp;&nbsp; 然后，你可以使用&quot;savedefault&quot;命令来把想要的入口数字保存到这个新的预设文
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 件中。<br>
  <br>
&nbsp;&nbsp;&nbsp; 好了，下次启动时，你可以通过使用类似上面第二步骤中的&quot;default FILE&quot;一样的
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 命令来读取已保存的入口数字。<br>
  <br>
同时，SAVEDEFAULT 命令增加了一个选项 <span class="Options">--wait=T</span> ,象这样：
<blockquote>
  <p><span class="cmd">savedefault --wait=5</span></p>
</blockquote>
<p>  如果`--wait=T' 选项被指定而且 T 非零，savedefault 命令将在它就要写入磁盘前，给使用者一个提示信息。<br>
  <br>
  这里是一个简单的menu.lst文件：<br>
  <br>
  #--------------------begin menu.lst---------------------------------------<br>
  <span class="bat">color black/cyan yellow/cyan<br>
  timeout 30<br>
  default /default<br>
  <br>
  title find and load NTLDR of Windows NT/2K/XP<br>
  find --set-root /ntldr<br>
  chainloader /ntldr<br>
  savedefault --wait=2<br>
  <br>
  title find and load CMLDR, the Recovery Console of Windows NT/2K/XP<br>
  fallback 2<br>
  find --set-root /cmldr<br>
  chainloader /cmldr<br>
  #####################################################################<br>
  # write string &quot;cmdcons&quot; to memory 0000:7C03 in 2 steps:<br>
  #####################################################################<br>
  # step 1. Write 4 chars &quot;cmdc&quot; at 0000:7C03<br>
  write 0x7C03 0x63646D63<br>
  # step 2. Write 3 chars &quot;ons&quot; and an ending null at 0000:7C07<br>
  write 0x7C07 0x00736E6F<br>
  savedefault --wait=2<br>
  <br>
  title find and load IO.SYS of Windows 9x/Me<br>
  find --set-root /io.sys<br>
  chainloader /io.sys<br>
  savedefault --wait=2<br>
  <br>
  title floppy (fd0)<br>
  chainloader (fd0)+1<br>
  rootnoverify (fd0)<br>
  savedefault --wait=2<br>
  <br>
  title find and boot Linux with menu.lst already installed<br>
  find --set-root /sbin/init<br>
  savedefault --wait=2<br>
  configfile /boot/grub/menu.lst<br>
  <br>
  title find and boot Mandriva with menu.lst already installed<br>
  find --set-root /etc/mandriva-release<br>
  savedefault --wait=2<br>
  configfile /boot/grub/menu.lst<br>
  <br>
  title back to dos<br>
  savedefault --wait=2<br>
  quit<br>
  <br>
  title commandline<br>
  savedefault --wait=2<br>
  commandline<br>
  <br>
  title reboot<br>
  savedefault --wait=2<br>
  reboot<br>
  <br>
  title halt<br>
  savedefault --wait=2<br>
  halt</span><br>
  #--------------------end menu.lst---------------------------------------<br>
  <br>
  注意 1：预设文件 DEFAULT 必须是存在的而且具有和前面所述一样严格的格式。<br>
  <br>
  注意 2：在一个确信有 MENU.LST 文件的相同目录中的 DEFAULT 文件将和 MENU.LST 文件一起被联合调用。<br>
  <br>
  注意 3：即使没有出现'default'命令，被关联的 DEFAULT 文件也将自动生效。<br>
  <span class="style1">注意 4：就在菜单文件（诸如，GRLDR 的关联文件MENU.LST,或是通过'grub.exe  --config-file=(DEVICE)/PATH/YOUR_MENU_FILE'来指定的，或是通过grub的`configfile'命令来指定的）取得控制权之前，它的关联文件DEFAULT只要出现就会被使用，直到遇见了一个明确的`default'命令。 </span>
<p>
<HR>

<H2><A name=delmod>delmod</A></H2><B>用法: </B>delmod modname|*<BR><B>描述:</B><BR><br>
<p> 卸载已加载至内存的外部命令，与 insmod 命令作用相反。</p>
<p> 执行未加参数的 delmode 命令，将输出当前已加载的外部命令。</p>
<p> 如果外部命令WENV已加载，可执行 delmode WENV 进行卸载。</p>
<p> 执行 delmode *  命令将卸载所有已加载的外部命令。</p>
<BR>
<HR>

<H2><A name=displaymem>displaymem</A></H2><B>用法: </B>displaymem<BR><B>描述:</B><BR><br>  
display what GRUB thinks the system address space map of the machine is, including all regions of physical RAM installed.
<p>
  显示 GRUB 所判断的当前系统的内存分布，包括所有物理内存区域。
<HR>

<H2><A name=echo>echo</A></H2>
<p><B>用法: </B>echo [-e] [-n] STRING<BR>
<B>描述:</B></p>
<p>(by zhaohj@wuyou)<BR>
  <br>  
  输出指定内容。</p>
<p>
  &nbsp;&nbsp;用法：echo [-e] [-n] STRING<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="Options">-e</span>:允许转义</p>
<p><span class="Options">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;-n</span>:不换行</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不带参数的echo，默认不转义、自动输出换行符。</p>
<p>
&nbsp;&nbsp;下面是一些转义符：<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;\NNN	（1到3位）八进制值 NNN 表示的字符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\\	反斜杠<br>
&nbsp;&nbsp;&nbsp;&nbsp;\a	警报 （声音）<br>
&nbsp;&nbsp;&nbsp;&nbsp;\b	退格符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\f	换页符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\n	换行符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\r	回车符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\t	水平制表符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\v	垂直制表符<br>
&nbsp;&nbsp;&nbsp;&nbsp;\xHH	（1到2位）十六进制值为 HH 的字节</p>
<p>增强功能：颜色设置，只支持console模式(文本模式).</p>
<p>&nbsp;&nbsp;使用方法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;echo -P:XXYY $[ABCD]MESSAGE</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">-P</span>为大写；<span class="Options">XX</span>为横坐标，<span class="Options">YY</span>为纵坐标。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用<span class="Options">$[ABCD]</span>来指定后面显示的字符使用的颜色.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;A 值为1时闪烁 (blinking foreground color).</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;B 值为1时高亮(light)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;C [0-7]背景色(background color)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;D [0-7]前景色-字体颜色(foreground color)</p>
<p>
例子：</p>
<p>  1：输出</p>
<blockquote>
  <p>
    <span class="cmd">symmpi</span><br>
    <span class="cmd">PCI\VEN_1000&DEV_0050</span></p>
  <p>
    命令：</p>
  <p><span class="bat">echo symmpi</span><br>
    <span class="bat">echo PCI\VEN_1000&DEV_0050</span></p>
  <p>或</p>
  <p><span class="bat">echo -e symmpi\r\nPCI\\VEN_1000&DEV_0050</span><br>
    #上面\r\n输出回车换行，\\输出\</p>
</blockquote>
<p>
2:输出</p>
<blockquote>
  <p>
    <span class="cmd">&nbsp;&nbsp;PCI\VEN_1000&DEV_0050 symmpi</span><br>
    #注意：输出前面有2个空格开头的内容</p>
  <p>
    命令： </p>
  <p><span class="bat">echo -e \x20\x20PCI\\VEN_1000&DEV_0050 symmpi</span><br>
    #上面\x20转义后为一个空格<br>
  </p>
</blockquote>
<HR>

<H2><A name=errnum>errnum</A></H2><B>用法: </B>errnum<BR><B>描述:</B><BR><br>  
return the error number.</p>
<p>
  返回最后一次命令的错误值。
<HR>

<H2><A name=errorcheck>errorcheck</A></H2>
<B>用法: </B>errorcheck [on | off | status]<BR><B>描述:</B><BR><br>  
turn on/off or display the error check mode, or toggle it if no argument.</p>
<p class="style1">
  打开/关闭或显示错误检查模式，没有跟任何参数将切换错误检查开/关。<br>
  errorcheck（错误检查）命令控制着错误是否被处理。默认错误检查是开启的 ,即在错误发生时命令脚本将停止执行。而假如错误检查是关闭的，那么脚本将一直执行到 boot 命令。<br>
  一条 boot 命令可以把错误检查转变为开启。 </p>
<p> 例：
<blockquote>
  <p><span class="cmd">errorcheck on</span><br>
    #打开错误检查，遇到错误将终止执行。
  </p>
  <p><span class="cmd">errorcheck off</span><br>
    #关闭错误检查，执行中遇到错误将忽略，直至执行完毕。</p>
  <p><span class="cmd">errorechek</span><br>
    #切换错误检查模式。</p>
  <p><span class="cmd">errorcheck status</span><br>
    #显示当前错误检查模式</p>
</blockquote>
<HR>

<H2><A name=exit>exit</A></H2><B>用法: </B>exit 
<BR><B>描述:</B><BR><br>
<p> 批处理专用命令。</p>
<p> 退出批处理的执行，语法和MS-DOS的批处理几乎一模一样，类似的还有 goto :eof 命令。</p>
<p>如果需要中途停止批处理脚本的运行也可以用 exit 1 命令。</p>
<HR>

<H2><A name=fallback>fallback</A></H2><B>用法: </B>fallback 
NUM<BR><B>描述:</B><BR><br>  
<span class="style1">go into unattended boot mode: if the default boot entry has any errors, instead of waiting for the user to do anything, it immediately starts over using the NUM entry (same numbering as 'default' command). this obviously won`t help if the machine was rebooted by a kernel that GRUB loaded.</span>
<p class="style1">
  如果调用当前的菜单项时出现错误，则转移到 NUM 项，执行 NUM 项菜单。
    <br>
  仅在菜单中使用，进入无人引导模式：如果默认启动项菜单执行出现错误，无需等待用户操作，<br>
  将立即跳转到<span class="Options"> NUM </span>项菜单执行（ NUM 计数方式和 'default' 中 NUM 计数相同）。
  <br>
类似的命令还有 <a href="#goto">goto</a> ，两个命令都是只能在菜单中使用，<br>
区别是 fallback 是在菜单执行出错后跳转到指定的菜单执行，即被动跳转；goto则是用于主动跳转。
<p> 例:</p>
<blockquote>
  <p><span class="bat">title fallback test<br>
    fallback 0<br>
    find --set-root /ntldr<br>
    chianloader /ntldr<br>
    boot</span></p>
</blockquote>
<p> 执行时在查找 ntldr 文件失败后将不会提示用户出错，会直接跳转到 0 项菜单继续执行。</p>
<p> 对比 goto 命令，实现同样效果：</p>
<blockquote>
  <p><span class="bat">title fallback test<br>
    find --set-root /ntldr || goto 0<br>
    chianloader /ntldr<br>
    boot</span></p>
</blockquote>
<p> 因为 || 的缘故，查找 ntldr 文件失败后会执行 goto 0 命令，跳转到 0 项菜单执行。</p>
<HR>

<H2><A name=find>find</A></H2><B>用法: </B>find [--set-root[=DIR]] [--devices=DEVLIST] [--ignore-floppies] [--ignore-cd] 
[FILENAME] [CONDITION]<BR><B>描述:</B><BR><br>  
<span class="style1">search for the filename FILENAME if all of partitions and print the list of the devices which contain the file and suffice CONDITION. CONDITION is a normal grub command, which return non-zero for TRUE and zero for FLASE. DEVLIST specify the search devices and order, the default DEVLIST is upnhcf. DEVLIST must be a combinatiaon of these letters (u, p, n, h, c,f). if the option --set-root is used and FILENAME is found on a device, then stop the find immediately and set the device as new root. if the option --ignore-floppies is present, the search will bypass all floppies.and --ignore-cd will skip (cd).</span>
<p>
  <br>
  在所有分区上查找文件名, 并显示包含该文件的设备。</p>
<p>1、如果设置了参数 <span class="Options">--set-root</span>，则在找到第一个匹配后马上停止，并且把该设备设为根。</p>
<p>2、如果设置了参数 <span class="Options">--ignore-floppies</span> 将忽略软驱，即查找文件时不在软驱设备上查找。</p>
<p>3、如果设置了参数 <span class="Options">--ignore-cd</span> 将忽略光驱，即查找文件时不在光驱设备上查找。</p>
<p>4、0.4.5版grub4dos更新：	新的find 命令语法允许指定要查找和设备和查找的顺序。</p>
<p> &nbsp;&nbsp;&nbsp;0.4.5新增参数  <span class="Options">--devices=DEVLIST</span>，用于指定查找的设备和顺序。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEVLIST可以下以下的字母组合。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">u,p,n,h,c,f -->分别对应 ud,pd,nd,hd,cd,fd,</span></p>
<p> &nbsp;&nbsp;&nbsp;查找时根据DEVLIST指定的设备顺序进行查找。默认是upnhcf。</p>
<p>&nbsp;&nbsp;&nbsp;要注意的是若同时使用 --ignore-cd 或 --ignore-floppies 参数将会删除devices列表中的c或f参数。</p>
<p>
5、find 命令的语法允许带条件的查找设备。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find [OPTIONS] [FILENAME] [CONDITION]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选项&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;条件</p>
<p>
&nbsp;&nbsp;&nbsp;其中的 CONDITION 是一个返回值是 TRUE 或者 FALSE 的标准 grub 命令。</p>
<p>注意：0.4.5版的find命令有一个改变，查找的时候会优先查找当前设备（如果在列表中的话）。 </p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例 1:</p>
<blockquote>
  <p><span class="cmd">find</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这会列举所有的分区，所有的软驱和 (cd) 。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例 2：</p>
<blockquote>
  <p><span class="cmd">find +1</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这会列举文件系统已知的所有设备。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例 3:</p>
<blockquote>
  <p><span class="cmd">find checkrange 0xAF parttype</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这会列举分区类型为0xAF的所有分区。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例 4：</p>
<blockquote>
  <p><span class="cmd">find /ntldr checkrange 0x07 parttype</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这会列举分区类型为 0x07 且根目录存在 ntldr 的所有分区。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例 5:</p>
<blockquote>
  <p><span class="cmd">find --set-root makeactive --status</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将会把第一个激活的主分区设为当前根。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;示例6：</p>
<blockquote>
  <p><span class="cmd">find --set-root ls /GRUB/</span></p>
</blockquote>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用 find 和 ls 组合可以用来搜索文件夹，并将查找到的分区设为当前根。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;示例7：</p>
<blockquote>
  <p><span class="cmd">find  --set-root=/TMP  /BOOT/GRUB/MENU.LST</span></p>
</blockquote>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它等同于这一组命令：</p>
<blockquote>
  <p>find  --set-root  /BOOT/GRUB/MENU.LST<br>
    root  ()/TMP</p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例8：</p>
<blockquote>
  <p><span class="cmd">find --devices=h /file</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只查找硬盘上的文件</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例9：</p>
<blockquote>
  <p><span class="cmd">find --devices=hcf /file</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;依次查找硬盘、光盘、软盘上的文件<br>
</p>
<HR>

<H2><A name=fontfile>fontfile</A></H2><B>用法: 
</B>fontfile FILE<BR><B>描述:</B><BR><br>指定中文字体文件，并切换到简体中文显示方式。
<p> 注意： 需要使用中文版 grldr 文件 ！！</p>
<p> 需自行准备中文字库， 以字库名为 fonts.gz 为例，使用</p>
<blockquote>
  <p><span class="cmd">fontfile /grub/fonts.gz</span></span></p>
</blockquote>
<p> 进行加载。同时可以配合 splashimage 命令来加载背景图支持。</p>
<p> 注意：使用fontfile方式加载中文支持，菜单文件需使用 ANSI 文本编码模式，否则中文会显示为乱码。</p>
<p> 其他加载中文还有 unifont 方式和 gfxmenu 方式。unifont 是外部命令，但不能加载背景图。</p>
<p><br>
使用unifont方式加载中文支持，菜单文件需使用 UTF-8 文本编码模式，否则中文会显示为乱码。</p>
<p> gfxmenu 方式制作较麻烦，但显示效果最好，菜单文件需使用 UTF-8 文本编码模式，否则中文会显示为乱码。</p>
<HR>

<H2><A name=foreground>foreground</A></H2><B>用法: 
</B>foreground RRGGBB<BR><B>描述:</B><BR><br>  sets the foreground color when in graphics mode. RR is read, GG is green, and BB 
is blue. Numbers must be in hexadecimal.</p>
<p>
  设置图形模式下的前景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六
进制的值。

<p>需配合 foreground 和 unifont 命令共同使用。unifont 用来加载中文支持，background 为背景色，foreground 为前景色。
  <br>
<HR>

<H2><A name=fstest>fstest</A></H2>
<B>用法: 
</B>fstest [on | off | status]
<BR><B>描述:</B><BR><br>  turn on/off or display the fstest mode, or toggle it if no argument.</p>
<p>
切换文件系统的试验模式。
<blockquote>
  <p> 例：<br>
    <br>
    <span class="cmd">fstest on</span><br>
    #打开文件系统的试验模式。
  </p>
  <p><span class="cmd">fstest off</span><br>
    #关闭文件系统的试验模式。</p>
  <p><span class="cmd">fstest</span><br>
    #切换文件系统的试验模式。</p>
  <p><span class="cmd">fstest status</span><br>
    #显示当前文件系统的试验模式</p>
</blockquote>
<HR>

<H2><A name=geometry>geometry</A></H2><B>用法: </B>geometry [--tune] [--bios] [--sync] [DRIVE]<BR><B>描述:</B><BR><br>  
<span class="style1">print the information for drive DRIVE of the current root device if DRIVE is not specified. if --tune is specified, the geometry will change to the tuned value.if --bios is specified, the geometry will change to BIOS reported value. if --sync is specified, the C/H/S values in partiton table of DRIVE and H/S values in BPB of each primary partition of DRIVE(or BPB of floppy DRIVE) will be updated according to the current geometry of DRIVE in use.</span>
<p class="style1">
  输出驱动器的相关信息。在grub壳程序中, 你可以用这条命令设置驱动器参数为任意值。如果你省略了总扇区数, 则该值缺省有其它参数决定。</p>
<h4>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分支式驱动器</h4>
<p class="style1">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些机器在 CHS 和 LBA 模式之间对驱动器实施不同的动作。当你使用标准的BIOS调用int13/AH=02h来读取扇区时，你可能会发现这个驱动器是一个软盘，但是当你用扩展的BIOS调用(EBIOS)int13/AH=42h来读取扇区时，你会发现是一个光盘。这样的驱动器被叫做分支式的。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="style1">一个分支式的驱动器拥有两个驱动器号：</span><br>
<span class="style1">一个是标准的 BIOS 驱动器号十六进制的 00或FF ，并且这个驱动器只使用 CHS 模式的磁盘访问（标准的BIOS int13/AH=02h）；<br>
另一个是标准的 BIOS 驱动器号（按位与）0x100 （即十进制的256），并且这个驱动器只使用 LBA 模式的磁盘访问（EBIOS int13/AH=42h）。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;例如，驱动器0x00（即，第一软驱）是分支式的.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么驱动器（0x00）使用 CHS 模式来访问它的扇区</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而驱动器（0x100）则使用LBA 模式来访问它的扇区。</p>
<p class="style1">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;geometry 命令会用 BIF 代替常见的 CHS 和 LBA 来报告分支式驱动器的磁盘访问模式已知的分支式驱动器。发现虚拟机Virtual PC和一些真实机器当它们引导一个软盘模拟模式的可启动光盘时会建立一个分支式的软驱。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;命令"geometry (fd0)"将显示：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drive 0x00(BIF): C/H/S=...Sector Count/Size=.../512</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;而"geometry (0x100)"将显示</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drive 0x100(BIF): C/H/S=...Sector Count/Size=.../2048</p>
<p class="style1">
&nbsp;&nbsp;&nbsp;&nbsp;实际上(0x100) 可以访问整个光盘。<br>
&nbsp;&nbsp;&nbsp;&nbsp;你可以执行"ls (0x100)/" 显示光盘上文件（不是那个被引导的软盘映像中的文件），当然 "ls (fd0)/"可以列举那些在被引导的软盘映像中的文件。<br>
&nbsp;&nbsp;&nbsp;&nbsp;注意：仅仅是某些（真实的或虚拟的）机器有这样的行为，其他的机器不会产生分支式驱动器。</p>
<h4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;磁盘几何参数的修正和同步</h4>
<p>
<span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当一个USB 存储设备被连接到一台（或者是不同的）机器上时，分区表中或 BPB 中的磁盘几何参数值可能是无效的，并且这个机器可能在启动时死机。因此你需要为驱动器找到一个正确的磁盘几何参数（使用 'geometry --tune' 命令），然后更新分区表或 BPB 中的磁盘几何参数（使用 'geometry --sync' 命令）。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假如你想启动到DOS，那上面的步骤是必要的，因为 DOS 要求有正确的磁盘几何参数在分区表和BPB 中。Windows 及 Linux 应该也需要，因为引导程序运行在实模式中。</span><br>
</p>
<HR>

<H2><A name=gfxmenu>gfxmenu</A></H2><B>用法: </B>gfxmenu FILE<BR><B>描述:</B><BR><br>
使用 FILE 中的图形菜单。</p>
<p>
使用它，你首先需要找到一个你需要的mesage文件，然后在menu.lst中用类似这样的命令来装载它：</p>
<blockquote>
  <p><span class="cmd">gfxmenu /message</span></p>
</blockquote>
<p>
这是一个全局命令，也就是说，不能放入任何的菜单项中。</p>
<p> 同时，它只能被使用于配置文件中，而在控制台模式中执行它是无效的。</p>
<p>
注意： 1、 gfxmenu 不能与全局密码保护功能同时使用，且配置文件需要使用 UTF-8 编码格式。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、 若使用 gfxmenu 后造成 default 命令和 timeout 命令失效，可以尝试将default 命令和 timeout 命令
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;放在 gfxmenu 命令前执行。
<p> 在 gfxmenu 之后可以运行其它 menu.lst，下面是在 GFXMENU 之后使用 CONFIGILE 的示例：
<p> <span class="Notes"># The menu.lst file for gfxmenu</span></p>
<blockquote>
  <p><span class="bat">default=0<br>
    timeout=5<br>
    gfxmenu /message<br>
    configfile /another.lst<br>
    title 0..........<br>
    ................<br>
    title 1..........<br>
    ................<br>
    title 2..........<br>
    ................</span></p>
</blockquote>
<p><span class="Notes"># End of menu.lst</span></p>
<p> <span class="Notes"># Begin another.lst</span></p>
<blockquote>
  <p><span class="bat">default=0<br>
    timeout=5<br>
    title 0..........<br>
    ................<br>
    title 1..........<br>
    ................<br>
    title 2..........<br>
    ................</span></p>
</blockquote>
<p><span class="Notes"># End of another.lst</span></p>
<p>会首先尝试执行 gfxmenu 命令。当它退出时（或者失败时）控制会转到 another.lst 菜单。</p>
<HR>

<H2><A name=goto>goto</A></H2>
<p><B>用法: </B> goto NUM      （菜单中使用）
</p>
<p>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;  goto [:]LABLE （批处理中专用）</p>
<p><B>描述:</B><BR><br>
  <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto 命令有两种，一种是菜单中使用的 goto ，类似fallback命令，可以在执行某项菜单失败后无需用户干预跳转到指定的 </span><span class="Options">NUM </span>项<span class="style1">菜单执行，与fallback区别为主动跳转和被动跳转。fallback是出错后才能进行跳转，goto则是可以根据条件判断来进行跳转（fallback实际也可以，但是会很麻烦）。<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;另一种是批处理中使用的 goto 命令，语法和MS-DOS的批处理几乎一模一样，跳转到指定的 </span><span class="Options">LABLE </span><span class="style1">标签执行。类似 call 命令，区别是 call 跳转执行时可以另外附加参数，goto不可以。</span></p>
<p> 例：<br>
  <br>
菜单中使用：</p>
<blockquote>
  <p> <span class="bat">title goto test<br>
    find --set-root /bootmgr || goto 0<br>
    chainloader /bootmgr<br>
    boot</span><br>
    #在所有设备下查找 bootmgr 文件，找不到则跳转到 菜单0 继续执行。</p>
</blockquote>
<p>在批处理中使用：</p>
<blockquote>
  <p> =========GRUB4DOS BATCH SCRIPT START===============================<br>
    <span class="bat">!BAT #注：文件头!BAT是必须的用于识别这是一个GRUB4DOS批处理脚本<br>
    echo %0<br>
    echo Your type: %1 %2 %3 %4 %5 %6 %7 %8 %9<br>
    call :echo This is a test string<br>
    goto :label2<br>
    :label1<br>
    echo %1 %2 %3 %4 %5 %6 %7 %8 %9<br>
    goto :eof<br>
    :label2<br>
    echo end of batch script.</span><br>
    =========GRUB4DOS BATCH SCRIPT END===============================</p>
</blockquote>
<p> &nbsp;&nbsp;假定此批处理文件名为 test 则</p>
<blockquote>
  <p><span class="cmd">grub&gt; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">Your type:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">This is a test string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">end of batch script.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
  <p><span class="cmd">grub&gt; test this is only a test&nbsp;&nbsp;</span><br>
    <span class="cmd">test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">Your type: this is only a test&nbsp;&nbsp;</span><br>
    <span class="cmd">This is a test string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br>
    <span class="cmd">end of batch script.&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
</blockquote>
<HR>

<H2><A name=graphicsmode>graphicsmode</A></H2><B>用法: </B>graphicsmode [0x12 | 0x6A]<BR><B>描述:</B><BR><br>  
<span class="style1">display/set the graphics mode number for the next graphics init.return the currentgraphics mode setting.<br>
现在有两2种可选的图形模式，默认的是640x480模式。新的是800x600模式(对一些机子支持不是很好,有可能会死机）。<br>
使用以下方法可以切换图形显示模式。</span>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;1. 确定目前是在控制台模式，你可以执行命令 "terminal console" 进行切换。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;2. 使用命令"<span class="Options">graphicsmode 0x6a</span>" 设置图形模式为0x6A。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;3. 进入图形模式，你可以使用命令"terminal graphics".<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;如果在切换之前不是图形模式，那该命令无效，你可以使用splashimg或fontfile命令。</p>
<p>
  注： 1. 如果想换回默认的640x480，把上面的第2步改成"<span class="Options">graphicsmode 0x12</span>".<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 经过改进,更新的版本，可以直接改变，只要上面第2步一条命令就可以搞定。<br>
<br>
例子：
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在默认图形模式中(使用splashimage或fontfile命令都会进入图形模式）.<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入以下命令可以直接切换到800x600.<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graphicsmode 0x6a
<p>
<HR>

<H2><A name=halt>halt</A></H2><B>用法: </B>halt [--no-apm] [--no-acpi]<BR><B>描述:</B><BR><br>  
<span class="style1">halt the system using ACPI and APM. if --no-acpi is specified, only APM is to be tried. if --no-apm is specified, only ACPI is to be tried. if both option are specified, return to grub4dos with failure.</span>
<p>可以使用ACPI或APM模式关闭系统。</p>
<blockquote>
  <p><span class="cmd">halt --no-apm</span></p>
</blockquote>
<p> 当使用 --no-apm 参数时，只有 ACPI 关机代码才起作用。</p>
<blockquote>
  <p><span class="cmd">halt --no-acpi</span></p>
</blockquote>
<p>当使用 --no-acpi 参数时，只有 APM 关机代码才起作用。</p>
<blockquote>
  <p><span class="cmd">halt --no-apm --no-acpi  </span></p>
</blockquote>
<p>当同时使用 --no-apm 和 --no-acpi 参数时，halt 给出失败信息，然后返回 grub4dos。</p>
<blockquote>
  <p><span class="cmd">halt --force-sci</span></p>
</blockquote>
<p>--force-sci 是ACPI关机方式中的一种。</p>
<p><br> 
关闭系统命令还有 zw2312914 编写的 g4d_off 外部命令，当使用 halt 关闭系统失败时可以尝试使用 g4d_off 关闭系统。</p>
<p> g4d_off 下载见 <a href="http://code.google.com/p/grubutils/downloads/list" target="_blank">http://code.google.com/p/grubutils/downloads/list</a></p><HR>

<H2><A name=help>help</A></H2><B>用法: </B>help [--all] [PATTERN 
...]<BR><B>描述:</B><BR><br>  
display helpful information about builtin commands.Not all commands aren`t shown without the option '--all'</p>
<p>
 显示内部命令的帮助信息。要查看所有命令的帮助，请使用 `--all' 参数。<BR>
<HR>

<H2><A name=hiddenflag>hiddenflag</A></H2><B>用法: 
</B>hiddenflag [--set | --clear] [PARTITION]<BR><B>描述:</B><BR><br>  
<span class="style1">hide/unhide PARTITION by setting/clearing the "hidden" bit in its parition type code, or report the hidden status. The default partition is the current root device.</span>
<p> 通过更改分区类型来隐藏/显示分区，默认分区是当前根设备。
<p> 类似命令 hide 和 unhide</p>
<p> 例：</p>
<blockquote>
  <p><span class="cmd">hiddenflag<br>
  </span>#输入当前跟设备的分区显/隐状态。</p>
  <p><span class="cmd">hiddenflag --set (hd1,0)<br>
  </span>#将第二硬盘第一主分区设置为隐藏（即若原分区类型为0x07，现在分区类型为0x17）。</p>
</blockquote>
<p>对当前根设备的分区操作时可以省略 PARTITION， 即 <span class="bat">hiddenflag --set</span></p>
<blockquote>
  <p><span class="cmd">hiddenflag --clear (hd1,0)<br>
  </span>#显现第二硬盘第一主分（即若原分区类型为0x17，现在分区类型为0x07）。</p>
</blockquote>
<p>对当前根设备的分区操作时可以省略 PARTITION， 即 <span class="bat">hiddenflag --clear</span></p>
<HR>

<H2><A name=hiddenmenu>hiddenmenu</A></H2><B>用法: 
</B>hiddenmenu [--chkpass] NUM<BR><B>描述:</B><BR>
<p>隐藏启动菜单，不会产生启动菜单，使用指定的 NUM 项菜单启动，可以按esc看到主菜单。</p>
<p>
<span class="Options">--chkpass</span>参数</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;功能：	在隐藏菜单的时候按Esc键要输入正确的密码才可以显示菜单。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;注意：1.该功能启用之后，如果按了其它按键则直接启动默认菜单。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认的Esc按键可以自由设置。使用--chkpass=KEY</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.菜单初始化有password命令时才需要输入密码。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.按键代码如果不清楚可以使用 pause --test-key 命令来获取功能。</p>
<p>
例子：&nbsp;hiddenmenu --chkpass=0x8500	&nbsp;&nbsp;&nbsp;&nbsp;按F11键才可以显示菜单。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hiddenmenu --chkpass	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按Esc键才可以显示菜单。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hiddenmenu --chkpass=0x2200	&nbsp;&nbsp;&nbsp;&nbsp;按Alt+G显示菜单。<br>
<HR>

<H2><A name=hide>hide</A></H2><B>用法: </B>hide 
PARTITION<BR><B>描述:</B><BR><br>  
<span class="style1">hide PARTITION by setting the "hidden" bit in its partition type code.the default 
partition is the current root device.<br>
通过在分区类型上置隐藏标志，隐藏指定分区。与 hiddenflag 命令类似，<br>
但 hide 命令只能用来隐藏分区，且</span>可以省略 PARTITION 参数，此时认为 PARTITION 是当前的 root 设备。
<p> 例：</p>
<blockquote>
  <p><span class="cmd">hide (hd0,0)</span><br>
    #隐藏第一硬盘第一主分区</p>
</blockquote>
<HR>

<H2><A name=if>if</A></H2>
<p><B>用法: </B>if [/I] [NOT] STRING1==STRING2 [COMMAND]</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if [NOT] exist VARIABLE|FILENAME [COMMAND]</p>
<p><B>描述:</B><BR><br>
  1.如果 <span class="Options">STRING1==STRING2</span> 字符串匹配，执行后面的COMMAND(如果有指定的话）。否则返回TRUE。<br>
  <br>
  2. <span class="Options">/I</span> 参数指写不区分大小写匹配。<br>
  <br>
  3.<span class="Options">[NOT]</span> 相反，如果STRING1==STRING2不匹配。<br>
  <br>
  4.<span class="Options">exist</span> 用于判断变量VARIABLE或文件FILENAME是否存在（filename必须以&quot;<span class="Options">/</span>&quot;或&quot;<span class="Options">(</span>&quot;开头）。</p>
<p> 例子：<br>
  <br>
1.判断字符串是否相等，并且不区分大小写。</p>
<blockquote>
  <p><span class="cmd">if /i test==%myvar% echo this is a test</span></p>
</blockquote>
<p>  2.判断字符是否为空。</p>
<blockquote>
  <p><span class="cmd">if %myvar%#==# echo variable myvar not defined.</span></p>
</blockquote>
<p>  注：我们使用了一个#不防止空操作，当然也可以使用其它字符，如</p>
<blockquote>
  <p><span class="cmd">if &quot;%myvar%&quot;==&quot;&quot; echo variable myvar not defined.</span></p>
</blockquote>
<p>使用方法举例：<br>
  <br>
  1.显示一个包括变量的串。</p>
<blockquote>
  <p><span class="cmd">echo myvar = %myvar%</span></p>
</blockquote>
<p>  2.使用一个变量代替命令。</p>
<blockquote>
  <p><span class="cmd">set print=echo</span><br>
    <span class="cmd">%print% This a test.</span></p>
</blockquote>
<p>  3.你可以使用一个&ldquo;<span class="Options">^</span>&rdquo;来阻此被变被扩展，例子</p>
<blockquote>
  <p><span class="cmd">echo %myvar^%</span><br>
    或<br>
    <span class="cmd">echo %my^var%</span></p>
</blockquote>
<p>  将会显示 %myvar%而不是扩展myvar之后的字符。总之，只要出现了^那就不会扩展这个变量。</p>
<p>注：我们只处理在%%之间的^符号。</p>
<HR>

<H2><A name=initrd>initrd</A></H2><B>用法: </B>initrd FILE [FILE...]<BR><B>描述:</B><BR><br>  
<span class="style1">load an initial ramdisk FILE for a Linux format boot image and set the appropriate parameters in the Linux setup area in memory. for Linux 2.6+ kernels, multiple cpio files can be loaded. </span>
<p><span class="style1">
  加载Linux格式的初始化虚拟盘, 并设置必要的参数。 
  指定在系统启动访问真正的根文件系统前，访问的ramdisk映象。
  </span>
<HR>

<H2><A name=insmod>insmod</A></H2>
<p><B>用法: </B>insmod MODFILE|FILE.MOD<BR>
  <B>描述:</B><BR><br>  
FILE.MOD is MODFILE package, it has multiple MODFILE</p>
<p> 将外部命令加载到内存，使得执行外部命令时直接从内存读取，而不是从源设备读取，加快执行速度。</p>
<p>FILE.MOD 是使用 makemod 程序生成的外部命令合集，免去多次使用insmod加载外部命令的麻烦。</p>
<p>也可以使用Fbinsttool工具来制作 FILE.MOD 文件。</p>
<p> 例：</p>
<blockquote>
  <p><span class="cmd">insmod /GRUB/WENV</span><br>
    #将WENV加载至内存</p>
</blockquote>
<HR>

<H2><A name=is64bit>is64bit</A></H2><B>用法: </B>is64bit<BR><B>描述:</B><BR><br>  
return true if CPU is 64-bit and false if not.</p>
<p>
  如果CPU支持 64 位的话返回true，否则返回false
<HR>

<H2><A name=kernel>kernel</A></H2><B>用法: </B>kernel [--no-mem-option] 
[--type=TYPE] FILE [ARG 
...]<BR><B>描述:</B><BR><br>  
<span class="style1">attempt to load the primary boot image from FILE. the rest of the line is passed verbatim as the "kernel command line". any modules must be reloaded after using this command.TYPE must be either of "netbsd","freebsd","openbsd","linux","biglinux" and "multiboot". the option --no-mem-option tells GRUB not to pass a Linux`s mem option automatically.
</span>
<p><span class="style1">
  尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。<br>
  使用此命令以前，内核所用到的模块应该被重新载入。<br>
  参数</span><span class="Options"> --type</span><span class="style1"> 用于说明内核的类型，包括 "netbsd", "freebsd", "openbsd", "linux", "biglinux" 和 "multiboot"。<br>
  参数 </span><span class="Options">--no-mem-option</span><span class="style1"> 用于说明不必自动传递 Linux 的内存参数。</span><BR>
</p><HR>

<H2><A name=lock>lock</A></H2><B>用法: 
</B>lock<BR><B>描述:</B><BR><br>
break a command execution unless the user is authenticated.</p>
<p>
如果用户未被认证，则终止命令的执行。
<p class="style1"> 在menu.lst的全局设置里用password选项指定一个密码，然后在菜单项的title的下一行  加上一个'lock'命令，这样在开机引导该菜单项时，就要用p命令解锁，并输入密码，才能引导该系统。
<p> 例：</p>
<blockquote>
  <p> <span class="bat">password 123 </span></p>
  <p> <span class="bat">title boot xp<br>
    lock <br>
    find --set-root /ntldr<br>
    chainloader /ntldr</span></p>
</blockquote>
<HR>

<H2><A name=ls>ls</A></H2><B>用法: 
</B>ls [FILE_OR_DIR]<BR><B>描述:</B><BR><br>
list file or directory.</p>
<p>
列表文件或目录。
<p> 例：<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmd">ls</span><br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;#列出当前设备根目录下的文件和目录
<p> 可以用来判断文件夹或文件是否存在。使用 cat --length=0 FILE 只能判断文件是否存在。</p>
<p>注意： 若文件夹下无任何文件，对 ls 命令而言则认为该文件夹不存在。</p>
<HR>

<H2><A name=makeactive>makeactive</A></H2><B>用法: 
</B>makeactive [--status] [PART]<BR><B>描述:</B><BR><br>  
<span class="style1">activate the partition PART. PART defaults to the current root device.this command is limited to _primary_ PC partitions on a hard disk.</span>
<p>
  将 root 设备置为活动分区。当然，此命令只对 PC 的硬盘主分区有效。
<p>例：
<blockquote>
  <p><span class="cmd">makeactive --status (hd0,0)</span><br>
    #查看第一硬盘第一主分区是否为活动状态。
  </p>
  <p><span class="cmd">makeactive (hd0,0)</span><br>
    #将第一硬盘第一主分区设置为活动。</p>
</blockquote>
<HR>

<H2><A name=map>map</A></H2>
<p><B>用法: </B>map [--status] [--mem[=RESERV] [--top]] [--hook] [--unhook] [--unmap=DRIVES] [--rehook]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[--floppies=M] [--harddrives=N] [--memdisk-raw=RAW] [--a20-keep-on=AKO]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[--safe-mbr-hook=SMH] [--int13-scheme=SCH] [--ram-drive=RD] [--rd-base=ADDR][--rd-size=SIZE] </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[--read-only] [--fake-write] [--unsafe-boot] </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[--disable-chs-mode] 
  [--disable-lba-mode] [--heads=H] [--sectors-per-track=S] TO_DRIVE_FROM_DRIVE]<BR>
  <B>描述:</B><BR><br>  
  <span class="style1">map the drive FROM_DRIVE to the drive TO_DRIVE. this is necessary when you chain-load some operating systems, such as DOS, if such an OS resides at a non-first drive. TO_DRIVE can be a disk file, this indicates a disk emulation. if --fake-write is given, any write operations to the emulated drive are allowed but the data written will be discarded. the --unsafe-boot switch enables the write to the Master and DOS boot sectors of the emulated disk. if --disable-chs=mode is given, CHS access to the emulated drive will be refused. if --disable-lba-mode is given, LBA access to the emulated drive will be refused. if RAW=1, all memdrives will be accessed without using int15/ah=87h. if RAW=0, then int15/ah=87h will be used to access memdrives. if one of --status,--hook,--unhook,--rehook,--floppies,--harddrives,--memdisk-raw, --a20-keep-on,--safe-mbr-hook,--int13-scheme,--ram-drive,--rd-base or --rd-size is given, then any other command-line arguments will be ignored. the --mem option indicates a drive in memory. if RESERV is used and <=0, the minimum memory occupied by the memdrive is (-RESERV) in 512-byte-sectors. if RESERV is used and >0 , the memdrive will occupy the mem area starting at absolute physical address RESERV in 512-byte-sectors and ending at the end of this mem block(uaually the end of physical mem).</span>  </p>
<p>对设备进行映射。这对于扇区链式引导是很有用的功能，比如 DOS。</p>
<p>这里，目的驱动器(TO_DRIVE)可以是一个磁盘文件，即使用磁盘虚拟功能。注意，这要求磁盘文件是连续存放于分区中的。</p>
<p>在map命令行中，<span class="Options">(hdm,n)+1</span>式的写法被解释成代表整个(hdm,n)分区，而不仅仅是此分区的第一扇区。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样的形式</p>
<p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;map ... (fd?)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是一个软盘仿真，而下面的形式</p>
<p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;map ... (hd?)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是一个硬盘仿真。<br>
</p>
<p>&nbsp;1、使用 <span class="Options">--mem</span> 参数表示把要仿真的镜像先加载到内存后再进行仿真。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;不加此参数时要求镜像存放在连续的扇区中。只有加了--mem参数才能使用firadisk或winvblock等第三方驱动。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;例一：&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmd">map --mem=-2880 (hd0,0)/floppy.img (fd0)</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个内存驱动器(fd0)将占用至少1440 KB的内存。这个用法对那些小于1440 KB的1.44M 软盘镜像很有用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;例二：&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmd">map --mem --read-only (hd0,0)/hd.img (hd1)</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个内存驱动器成为了一个硬盘驱动器，并且是只读的。这表示你不能向这个(hd1)中写入数据。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注：当使用--mem时，甚至是在进入Windows的时候，它看来都相当安全。Win98可以正常运行内存驱动器。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows NT/2000/XP不能识别仿真的驱动器，不管是否使用了--mem选项。&nbsp;</p>
<p>&nbsp;2、0.4.5新增参数 <span class="Options">--top</span> ，配合 <span class="Options">--mem</span> 参数使用，可以将镜像加载至高端内存，如 <span class="cmd">map --mem --top (hd0,0)/hdimg.img (hd1)</span> 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">注意</span>：把镜像加载到高位内存就不能使用gzip压缩，两者不能同时实现。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在grub4dos中，内存在3.25G处被分成了高端内存和低端内存两端，镜像不能跨3.25G这个点。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如4G内存的机器，高端内存大概为4.0G-3.25G=0.75G，即750M左右。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要注意的是，高端内存和低端内存是不能被同一个镜像同时使用的，比如4G内存，不能将800M体积的镜像加载到高端内存，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为高端内存只有750M左右，多余部分不会写入低端内存中，使用时要注意。</p>
<p>&nbsp;3、使用 <span class="Options">--hook</span> 参数表示仿真立即生效，即使是在GRUB的命令行模式中。</p>
<p> &nbsp;4、参数<span class="Options"> --unmap</span>用法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map --unmap=RANGE</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;其中的 RANGE 是一个已被映射的 BIOS 驱动器域。BIOS 驱动器号 0 表示第一软驱，1 表示第二软驱；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;0x80 表示第一硬盘，0x81 表示第二硬盘，等等；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;虚拟光盘(hd32) 对应于BIOS 驱动器号 0xA0 ,(hd33) 对应于0xA1 ，等等。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;示例 1：</p>
<blockquote>
  <p><span class="cmd">map --unmap=0,0x80,0xff</span></p>
</blockquote>
<p> &nbsp;&nbsp;&nbsp;&nbsp;这将反映射虚拟软驱 (fd0),虚拟硬盘(hd0)和虚拟光盘(0xff)。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;示例 2：</p>
<blockquote>
  <p><span class="cmd">map --unmap=0:0xff</span></p>
</blockquote>
<p> &nbsp;&nbsp;&nbsp;&nbsp;这将反映射所有的虚拟软驱，所有的虚拟硬盘和所有的虚拟光盘。 </p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;注意 1：通常，一条&lsquo;map&rsquo;命令将在驱动器映射表中为虚拟驱动器增加一个表项。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而&lsquo;--unmap&rsquo;意味着在驱动器映射表中（具体是指虚拟驱动器）的表项会被删除。<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;注意 2：<span class="Options">--unhook</span> 选项仅仅是断开 INT13 的挂钩（在中断矢量表中）。它不会影响到驱动器映射表。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而且在执行了一个&lsquo;boot&rsquo;命令之后，即使是它已经被反映射了的时候，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT13磁盘仿真程序也会在需要的时候（即，驱动器映射表非空时）自动建立挂钩。</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;注意 3：通常你需要在已经改变了驱动器映射表之后执行一条`map --rehook'命令。</p>
<p>&nbsp;5、若使用了 <span class="Options">--read-only</span> 参数，该功能将使`磁盘'处于只读;</p>
<p>&nbsp;6、若使用了 <span class="Options">--fake-write</span> 参数，该功能将使`磁盘'处于假写，即可以"写入"数据，但是却并未记录到真实磁盘上;</p>
<p>&nbsp;7、若使用了 <span class="Options">--unsafe-boot</span> 参数，该功能将使`磁盘'处于真实可写; </p>
<p>&nbsp;8、若使用了<span class="Options"> --disable-chs-mode </span>参数，CHS 访问功能将被禁用; </p>
<p>&nbsp;9、若使用了 <span class="Options">--disable-lba-mode</span> 参数，LBA访问功能将被禁用; </p>
<p>10、 <span class="Options">H 和 S</span> 指定了虚拟磁盘的物理参数。</p>
<p>11、若使用了 --status, --hook, --unhook,--rehook 诸参数之一, 那么其它的命令行参数将被忽略。</p>
<p>
  
  12、参数<span class="Options">--safe-mbr-hook=SMH</span>以及<span class="Options">--int13-scheme=SCH</span> 都和Win9x环境下（尽可能稳定的）使用磁盘仿真有关。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;SMH参数可以是0或1这个两个值之一。作为默认，SMH参数为1 。如果你在Win9x中遇到磁盘仿真的问题，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;你可以插入这样一行到`boot'命令之前，</p>
<blockquote>
  <p><span class="cmd">map --safe-mbr-hook=0</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;然后再试一次。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;SCH在使用时，也可以取0或1之一的值。作为默认，SCH为1 。如果你在Win9x中遇到磁盘仿真的问题，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;你可以插入这样一行到`boot'命令之前， </p>
<blockquote>
  <p><span class="cmd">map --int13-scheme=0</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;然后再试一次。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;顺便提醒一下。类似于--safe-mbr-hook和--int13-scheme ，MAP命令中有几个其他选项可被用以设置全局变量。</p>
<p> 13、
&nbsp;&nbsp;&nbsp;<span class="Options">map --floppies=M</span></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;其中的M 可以是0 , 1 或者2 。MAP 将把一个恰当的M 值设置在地址0040：0010 处。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="Options">map --harddrives=N</span></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;其中的N 可以是从0到127之间的值。MAP将把N 值设置在0040：0075处。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意：&nbsp; 1、BIOS数据区中的软盘和硬盘的总数在映射期间没有被改变。当主板上没有配置真实的软驱时，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你通常应该专门使用诸如&lsquo;map --floppioes=&rsquo;以及  &lsquo; map --harddrives=&rsquo;来设置它们。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不这样做，DOS可能会启动失败。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、&lsquo;map --floppies=&rsquo;和&lsquo;map --harddrives=&rsquo;需要在没有执行映射前单独使用。</p>
<p> 14、
&nbsp;&nbsp;&nbsp;<span class="Options">map --memdisk-raw=RAW</span></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;其中的RAW值默认为1 ,以防BIOS不支持中断int15/87h,或者int18/87h的支持有缺陷。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果RAW=0,将通过int15/ah=87h访问内存驱动器，用以模拟和内存驱动器类似的原生模式。</p>
<p>
15、
&nbsp;&nbsp;&nbsp;<span class="Options">map --ram-drive=RD</span></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;其中RD默认是0x7F的软驱号。如果随机内存驱动器是一个硬盘驱动器镜像（第一扇区含有分区表），</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;那么你可以将 RD 设置为大于或等于0x80并且小于0xA0之间的值。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果是一个光盘镜像，那需要设置为大于或等0xA0并且小于0xFF之间的值。</p>
<p> &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class="Options">map --rd-base=ADDR</span></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">map --rd-size=SIZE</span></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;其中的 ADDR 指定出内存映像的物理基地址。SIZE指定出内存映像的字节数大小。ADDR 默认为0 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;SIZE的默认值也是0 ，但是值为0 表示4 GB ,而不是零字节长的磁盘。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;随机内存驱动器可以在 GRUB 环境中通过使用 （rd） 设备来访问。</p>
<p>
16、参数<span class="Options">--in-situ</span>被使用于硬盘驱动器映像或者是硬盘驱动器分区。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;通过--in-situ ,我们可以把一个逻辑分区象征性的作为一个主分区来使用。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;--in-situ 的映射是整个驱动器的映射。它只虚拟出分区表和 DBR 上的BPB里的隐藏扇区数。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;尽管磁盘仿真在 win9x 中可能会遇到的各种问题，但在win9x中，in-situ的映射却运行得很好。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;注意 --in-situ 的映射不会改变真实的分区表。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;示例:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmd">map --in-situ (hd0,4)+1 (hd0)</span></p>
<p>
17、参数 <span class="Options">--a20-keep-on</span> ，它跟内存驱动器扇区访问后的A20 地址线控制有关</p>
<blockquote>
  <p><span class="cmd">map --a20-keep-on=0</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;它必须被使用于"map --hook"命令之前。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;作为默认，在INT13 对随机内存的扇区访问之后 A20 将一直开启。
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果"map --a20-keep-on=0" 被使用，那么在INT13 中断调用后的 A20 的状态将和在INT13中断调用前相同。<br>
<p> 18、常用例子：
<blockquote>
  <p><span class="cmd">grub&gt; map --status</span><br>
    #输出当前映射状态，可以报告出一些有价值的东西</p>
  <p><span class="cmd">grub&gt; map /ADD.ISO (0xff)</span><br>
    <span class="cmd">grub&gt; map --hook</span><br>
    <span class="cmd">grub&gt; chainloader (0xff)</span><br>
    <span class="cmd">grub&gt; boot</span><br>
    #将根目录下的 ADD.ISO  直接映射为(0xff)号设备（光驱），并启动</p>
  <p><span class="cmd">grub&gt; map --mem /PE.ISO (0xff)</span><br>
    <span class="cmd">grub&gt; map --hook</span><br>
    <span class="cmd">grub&gt; chainloader (0xff)</span><br>
    <span class="cmd">grub&gt; boot</span><br>
    &nbsp;#将根目录下的 PE.ISO  先加载至内存，再映射为(0xff)号设备（光驱），并启动</p>
  <p><span class="cmd">grub&gt; map --mem /DGDOS.IMG (fd0)</span><br>
    <span class="cmd">grub&gt; map --hook</span><br>
    <span class="cmd">grub&gt; rootnoverify (fd0)</span><br>
    <span class="cmd">grub&gt; chainloader ()+1</span><br>
    <span class="cmd">grub&gt; boot</span><br>
    #加载软盘镜像IMG文件</p>
</blockquote>
<p>&nbsp;</p>
<HR>

<H2><A name=md5crypt>md5crypt</A></H2><B>用法: </B>md5crypt<BR><B>描述:</B><BR><br>generate a password in MD5 format</p>
<p>
产生一个 MD5 格式的密码。
<p>注意： 即使 密码明文 相同，使用 md5crypt 产生的 MD5密码 也会不同。
<HR>

<H2><A name=module>module</A></H2><B>用法: </B>module FILE [ARG 
...]<BR><B>描述:</B><BR><br>  
<span class="style1">load a boot module FILE for a Multiboot format boot image (no interpretation of the file contents is made, so users of this command must know what the kernel in question expects). the rest of the line if passed as the "module command line", like the 'kernel' command.</span>
<p>
  对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。</p>
<p>
剩余参数作为`模快命令行`传递, 象'kernel'命令一样。<BR>
<HR>

<H2><A name=modulenounzip>modulenounzip</A></H2><B>用法: </B>modulenounzip FILE 
[ARG ...]<BR><B>描述:</B><BR><br>  
the same as 'module', expect that automatic decompression is disabled.</p>
<p>
与 'module' 类似, 但是自动禁用了解压缩。
<HR>

<H2><A name=outline>outline</A></H2><B>用法: </B>outline [on | off | status]<BR><B>描述:</B><BR><br>
turn on/off or display the outline mode, or toggle it if no argument.</p>
<p>打开/关闭 或 显示 图形模式下的字符轮廓显示模式。
<BR>
<HR>

<H2><A name=pager>pager</A></H2><B>用法: </B>pager [on | off | status]<BR><B>描述:</B><BR><br>  
turn on/off or display the pager mode, or toggle it if no argument.</p>
<p>
  没有参数时，切换满屏分页显示模式。如果使用了 FLAG 参数，那么它为`on' 时为开启, 为 `off' 时为关闭。
<BR>
<HR>

<H2><A name=partnew>partnew</A></H2><B>用法: </B>partnew [--active] PART TYPE START [LEN]<BR><B>描述:</B><BR><br>  
<span class="style1">create a primary patition at the starting address START with the length LEN, with the type TYPE. START and LEN are in sector units.if --active is used, the new partition will be active. START can be a contiguous file that will be used as the content/data of the new partition, in which case the LEN parameter is ignored, and TYPE can be either 0x00 for auto or 0x10 for hidden-auto.</span>
<p>
  创建一个新的主分区。START 为起始扇区号，LEN 为其包含的扇区数，TYPE 为其分区类型。</p>
<p>

可以使用 PARTNEW 来建立一个新的主分区。PARTNEW可以为逻辑分区生成一个新的主分区项（在分区表中）。</p>
<p>
例1：</p>
<blockquote>
  <p><span class="cmd">partnew (hd0,3) 0x07 (hd0,4)+1</span></p>
</blockquote>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里的（hd0,4）+1 代表了整个（hd0,4）分区。这条命令将建立一个分区类型为 0x07 的新的主分区（hd0,3），</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并且它的内容（即数据）和逻辑分区（hd0,4）一样。</p>
<p>
例2：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就像整个逻辑分区时的情况一样，一个连续的分区映像文件也可以用在PARTNEW 命令中</p>
<blockquote>
  <p><span class="cmd">partnew (hd0,3) 0x00 (hd0,0)/my_partition.img</span><br>
    <span class="style1">#这个 0x00 类型表示这个 MY_PARTITION.IMG 映像文件的分区类型由自动检测确定。上面的命令将建立一个类型恰当的新的主分区（hd0,3），并且使用这个连续的(hd0,0)/my_partition.img 文件中的全部内容（数据）作为它的内容（数据）。</span></p>
</blockquote>
<p>
注意：PARTNEW 将自动修正 BPB 中的“隐藏扇区数”并且这个修改是永久的。而且PARTNEW修改分区表也是永久的。</p>
<p>
例3：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了建立分区表项外，PARTNEW也可以用来删除（抹掉，擦除）一个分区表项。例如，</p>
<blockquote>
  <p><span class="cmd">partnew (hd0,3) 0 0 0</span></p>
</blockquote>
<p>
  <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样，主引导记录中最后一个分区表项将被清空。通常，你可以用"partnew PARTITION 0 0 0"的格式来抹掉其分区表项，但是已经存储在这个分区中的数据不被影响。
  </span><BR>
<HR>

<H2><A name=parttype>parttype</A></H2>
<B>用法: </B>parttype PART [TYPE]<BR><B>描述:</B><BR><br>  
<span class="style1">change the type of the partition PART to TYPE. if TYPE is omitted,return the partition type of the specified device (instead of changing it). PART default to the current root device.</span>
<p>
  改变指定分区(PART)的分区类型(TYPE)。 
不能无参数执行，至少需 PART 参数指定分区。
<p> 例：</p>
<blockquote>
  <p><span class="cmd">grub&gt; parttype (hd0,0)</span><br>
    #输出第一硬盘第一分区的分区类型。</p>
  <p><span class="cmd">grub&gt; parttype (hd0,0) 0x17</span><br>
    #将第一硬盘第一分区的分区类型改为 0x17。</p>
</blockquote>
<HR>

<H2><A name=password>password</A></H2><B>用法: </B>password [--md5] PASSWD 
[FILE]<BR><B>描述:</B><BR><br>  
<span class="style1">if used in the first section of a menu file, disable all interactive editing control (menu entry editor and command line). if the password PASSWD is entered, it loads the FILE as a new config file and restarts the GRUB Stage 2. if you omit the argument FILE, then GRUB just unlocks privileged instructions. you can also use it in the script section,in which case it will ask for the password, before continuing. the option --md5 tells GRUB that PASSWD is encrypted with md5crypt.</span>
<p>
  <br>
  设置密码。</p>
<p>当其处于菜单文件的首项时，将禁用所有的交互式菜单编辑功能，包括编辑菜单项('e')/进入命令行('c')。</p>
<p>当正确输入密码 (由PASSWD指定)后，载入新的菜单文件(由FILE指定)。</p>
<p>
如果你没有指定 FILE 项，那么上述被禁用的功能将被启用了。当然，你也可以将此命令用到某</p>
<p>
个菜单项里，用以提高系统安全性。可用--md5指定一个密码，启用grub的密码保护。
<p>为安全起见，一般使用md5值，这个值可以使用 md5crypt 命令生成。
<p> 例：</p>
<blockquote>
  <p><span class="bat">default 0<br>
    timeout 10<br>
    password 123 /MENU2.LST</span></p>
  <p> <span class="bat">title boot xp<br>
    password 456<br>
    chainloader /ntldr<br>
    boot<br>
  ............</span></p>
</blockquote>
<p class="style1"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#加载菜单后，只有 'p' 和 'b' 和两个快捷键可以起作用。可以按 'p' 输入密码， 或按 'b' 来启动高亮选中的菜单。本菜单加载后按 'p' 并输入正确的密码（123）后，会加载根目录下的MENU2.LST菜单文件。若选择 boot xp 项菜单启动，需要输入密码 456 后才能继续向下执行，密码错误将返回原菜单。在menu.lst的全局设置里用password选项指定一个密码，然后在菜单项的title的下一行加上'lock'命令，这样在开机引导该菜单项时，就要用p命令解锁，并输入密码，才能引导该系统。</p>
<HR>

<H2><A name=pause>pause</A></H2><B>用法: </B>pause [--wait=T] [--test-key] [MESSAGE...]<BR><B>描述:</B><BR><br>  
print MESSAGE, then wait until a key is pressed or T seconds has passed.</p>
<p>
  暂停命令的运行，并给出一段信息。任意键按下后，将继续。 </p>
<p>
  <span class="Options">--test-key</span>参数，显示按键扫描码。
<p>例1：
<blockquote>
  <p><span class="cmd">grub&gt; pause This is a test.</span><br>
    <span class="cmd">This is a test.</span><br>
    #按任意键后<br>
    <span class="cmd">grub&gt;
    </span>
  </p>
</blockquote>
<p> 例2：</p>
<blockquote>
  <p><span class="cmd">grub&gt; pause --wait=2 Second test.</span><br>
    <span class="cmd">Second test.</span><br>
    #倒计时2秒后，将自动返回命令行<br>
    <span class="cmd">grub&gt;</span></p>
</blockquote>
<p> 例3：</p>
<blockquote>
  <p><span class="cmd">grub&gt; pause --test-key</span><br>
    #按 数字键1 后<br>
    <span class="cmd">0231</span><br>
  <span class="cmd">grub&gt;</span></p>
  <p> #即数字键1的扫描码是 0231</p>
</blockquote>
<HR>

<H2><A name=pxe>pxe</A></H2><B>用法: </B>pxe [cmd] [parameters]<BR><B>描述:</B><BR><br>
在预置菜单中可以使用 '<span class="Options">pxe detect</span>' 命令
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pxe detect [BLOCK_SIZE] [MENU_FILE]<br>
  <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;包大小选项   &nbsp;&nbsp;菜单文件选项<br>
  &nbsp;&nbsp;&nbsp;&nbsp;</span><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Options">BLOCK_SIZE</span><span class="style1"> 选项指定出 pxe 包的大小。如果它没有被指定或者是被指定为 0 ，那么grub4dos将通过一个侦测过程来获取数据传送包的一个恰当的的值。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="Options">MENU_FILE</span><span class="style1"> 选项指定出 PXE 服务器上的配置文件。如果它被省略，在 menu.lst 子目录中的标准配置文件将获得控制。关于menu.lst 子目录中的配置文件的描述，请看下文。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果MENU_FILE 是以"/"开始的，那么PXE 服务器上的 MENU_FILE 将获得控制，否则（如果MENU_FILE不是以"/"开始）将没有菜单被执行。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在你的系统用 512 字节的默认包大小不能运行时，通常你应该在访问(pd)设备之前使用一条 "pxe blksize ..." 或 一条 "pxe detect ..."命令。</span></p>
<p>&nbsp;</p>
<h4> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRLDR 作为 PXE 启动文件</h4>
<p class="style1">&nbsp;&nbsp;&nbsp;&nbsp;GRLDR 可以被用作远程或网络服务器的 PXE 启动文件。(pd) 设备被用于访问服务器上文件。当 GRLDR 已经通过网络启动后，它将使用预设菜单作为配置文件。不过，你可以使用&quot;pxe detect&quot;命令，它的表现是和pxelinux一样的方式。<br>
&nbsp;&nbsp;&nbsp;&nbsp;* 首先，它将使用设备类型（使用它的 ARP 类型码）和地址来搜索配置文件，全部用破折号分割的十六进制；例如，对一个以太网（ARP 类型是1）的88:99:AA:BB:CC:DD 地址，它会用文件名01-88-99-AA-BB-CC-DD 来搜索。<br>
&nbsp;&nbsp;&nbsp;&nbsp;* 其次，它将使用它本地的IP 地址大写字母的十六进制格式（即192.0.2.91 转换为C000025B）来搜索配置文件。如果文件没有找到，它将去掉一个十六进制数字后再试一次。最后，它会尝试寻找一个名为 default （小写字母）的文件。</p>
<h4><br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PXE 设备</h4>
<p class="style1">&nbsp;&nbsp;&nbsp;&nbsp;如果使用PXE启动,GRUB4DOS 将建立一个虚拟设备 (pd)，可能通过它来访问tftp服务器上的文件。你可以使用下面的步骤来设置一个无盘启动环境：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">客户端：</span></p>
<p>  你需要从 PXE ROM 上启动。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">服务器端：</span></p>
<p>  你需要配置一个dhcp服务器和一个tftp服务器。在dhcp服务器上，使用grldr作为引导文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">配置文件：</span></p>
<p>你可能希望为不同的客户端加载一个不同的menu.lst 。GRUB4DOS将在以下位置查找配置文件：</p>
<p> [/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD<br>
  [/mybootdir]/menu.lst/C000025B<br>
  [/mybootdir]/menu.lst/C000025<br>
  [/mybootdir]/menu.lst/C00002<br>
  [/mybootdir]/menu.lst/C0000<br>
  [/mybootdir]/menu.lst/C000<br>
  [/mybootdir]/menu.lst/C00<br>
  [/mybootdir]/menu.lst/C0<br>
  [/mybootdir]/menu.lst/C<br>
  [/mybootdir]/menu.lst/default</p>
<p>如果/mybootdir/menu.lst 文件存在,将会优先使用,这样可以加快引导速度.</p>
<p>这里，我们假设客户端的网卡mac地址是 88:99:AA:BB:CC:DD ，而ip地址是192.0.2.91 (C000025B)。</p>
<p>  /mybootdir 是引导文件所在目录，例如，如果引导文件是 /tftp/grldr ，那么mybootdir=tftp 。</p>
<p>如果上面的文件都未出现，grldr将使用它的内置的menu.lst 。</p>
<p>这是一个如何访问tftp服务器上文件的menu.lst文件流程。</p>
<p>&nbsp; </p>
<blockquote>
  <p class="bat">title Create ramdisk using map<br>
    map --mem (pd)/floppy.img (fd0)<br>
    map --hook<br>
    rootnoverify (fd0)<br>
    chainloader (fd0)+1</p>
  <p> <span class="bat">title Create ramdisk using memdisk<br>
    kernel (pd)/memdisk<br>
    initrd (pd)/floppy.img</span></p>
</blockquote>
<p class="style1">&nbsp;&nbsp;&nbsp;&nbsp;chenall注: 你也可以省略 (pd)/ 或者使用 (bd)/ 或 ()/ ，这样可以使得一个菜单可以不经过修改就可以用于其它地方的启动，你可以看到这个 menu.lst 和在普通磁盘上引导的是相似的，你只是需要把象(hd0,0) 这样的设备用 (pd) 来代替。</p>
<p>&nbsp;</p>
<h4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;磁盘设备和 pxe 设备有一些不同点：</h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;1. 不能把pxe设备上的文件直接列表显示。如要列表,要求服务器上有dir.txt文件,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用以下命令可以创建一个dir.txt文件</p>
<blockquote>
  <p><span class="cmd">dir /b&gt;dir.txt</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也可以直接使用TFTPD32的服务器,选择自动生成DIR.TXT文件.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;2.blocklist 命令不能用于 pxe 设备上的文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;3.如果你想映射一个pxe服务器上的文件，你必须使用--mem 选项 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当你使用 chainloader 命令装载一个pxe 设备上的文件时，有一个选项你可以使用：</p>
<blockquote>
  <p><span class="cmd">chainloader --raw (pd)/BOOT_FILE</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选项 --raw 的执行就和--force一样，但是它是一次性将文件装载执行。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这可以改善一些情况下的执行效率。<br>
</p>
<h4>使用 pxe 命令来控制 pxe 设备。</h4>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;1. <span class="Options">pxe</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果没有使用任何参数，pxe 命令将显示当前设置。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;2. <span class="Options">pxe blksize N</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置tftp packet size (传输包)大小。最小值是 512 ，最大值是 1432 。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个参数主要使用在那些不支持远大于 512 字节包大小的tftp 服务器上。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;3. <span class="Options">pxe basedir /dir</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为tftp 服务器上的文件设置基本目录。如</p>
<blockquote>
  <p><span class="cmd">pxe basedir /tftp</span></p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么在pxe 设备上的所有文件都和目录 /tftp 相关。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，(pd)/aa.img 对应于服务器上的 /tftp/aa.img 。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基本目录的默认值是引导文件所在目录，例如，如果引导文件是 /tftp/grldr，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么默认的基本目录就是 /tftp 。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;4. <span class="Options">pxe keep</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保持 pxe stack。GRUB4DOS的默认退出时自动卸载pxe strack。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你希望在引导后继续使用PXE功能,比如用于RIS安装,这时必须使用这个选项。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;5. <span class="Options">pxe unload </span>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;立即卸载 PXE stack。pxe占用了大量的常规内存，某些引导程序可能会无法正常引导。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这时你可以先卸载然后再引导。一个例子：
<blockquote>
  <p class="bat">title Linux memtest<br>
    map --mem /memtest.bin (rd)<br>
    pxe unload<br>
  kernel (rd)+1
  </p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果在PXE启动时直接kernel /memtest.bin可能会失败。
  
<HR>

<H2><A name=quit>quit</A></H2><B>用法: </B>quit [--disable-a20]<BR><B>描述:</B><BR><br>  
go back to DOS if GRUB was previously launched from DOS</p>
<p>
  如果是从DOS环境进入GRUB环境中，使用本命令可以退回到DOS环境中。
<HR>

<H2><A name=read>read</A></H2><B>用法: </B>read ADDR<BR><B>描述:</B><BR><br>  
read a 32-bit value from memory at address ADDR and display it in hex format.</p>
<p>
  从内存的指定位置读取一个 32-bit 的值，并以十六进制形式显示出来。

<p> 附：在固定位置访问的一些内部变量 
<p>也可见 <a href="./GRUB4DOS6其他相关.htm#l">其他相关 中 在固定位置访问一些内部变量</a> 部分
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;地址            &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;长度            &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明<br>
=========	==============	==============================================<br>
0000:8208   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;启动分区号 install_partition (the boot partition)<br>
0000:8280	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;启动驱动器号(boot_drive)<br>
0000:8284	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;pxe 客户端 ip （即本地ip）<br>
0000:8288	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;pxe 服务器 ip<br>
0000:828C	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;pxe 网关 ip<br>
0000:8290	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8字节（即四字）&nbsp;&nbsp;&nbsp;最后访问的文件的大小（是执行&quot;cat --length=0&quot;后的文件大小）<br>
0000:8298	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;可用的扩展内存大小（以 KB 为单位）<br>
0000:829C	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;当前根分区号(current root partition)<br>
0000:82A0	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;当前根所在的驱动器(current root drive)<br>
0000:82A4	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;解压标志 （gzip非自动解压）,非0时不自动解压<br>
0000:82A8   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8字节（即四字）&nbsp;&nbsp;&nbsp;最后访问的分区的起始扇区号<br>
0000:82B0   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8字节（即四字）&nbsp;&nbsp;&nbsp;最后访问的分区的扇区总数<br>
0000:8278   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;GRUB4DOS编译的日期十进制数.
<p> 例一，</p>
<blockquote>
  <p><span class="cmd">checkrange 20101230 read 0x8278</span><br>
    可用于判断当前使用的GRUB是否在2010-12-30日或之后（如2011-01-11日）编译的。</p>
</blockquote>
<p> 例二，</p>
<blockquote>
  <p><span class="cmd">checkrange 0x21 read 0x8280</span><br>
    可用于判断当前是否为 pxe 启动环境。</p>
</blockquote>
<p>例三，（by zhaohj）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;相关知识：</p>
<p class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;512*1024=524288=0x80000<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1024*1024=0x100000</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;判断当前物理内存大小：</p>
<blockquote>
  <p><span class="cmd">checkrange 0:0x80000 read 0x8298 </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;...                       0-512 MB</p>
  <p><span class="cmd">checkrange 0x80001:0x100000 read 0x8298</span> &nbsp;&nbsp; &nbsp; ...             512~1024 MB</p>
  <p><span class="cmd">checkrange 0x100001:-1 read 0x8298</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...                     1024 MB 以上</p>
</blockquote>
<p>例四，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;内存变量 <span class="Options">0x4cb00</span> ，可以获取变量值的长度（不依赖WENV）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如：<span class="bat">set a=123456 &amp;&amp; set /a len_a=*0x4cb00</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;变量 len_a 的值即为 变量 a 的长度（此处值为6）。</p>
<p>例五，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;内存变量 <span class="Options">0x475 的低位</span>保存的是硬盘数，获取硬盘（包含usb-hdd）数量：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">set /a x=*0x475&amp;0xff</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;x的值即为硬盘数量，如x=1表示一块硬盘，x=2表示二块硬盘</p>
<p>&nbsp;</p>
<HR>

<H2><A name=reboot>reboot</A></H2><B>用法: </B>reboot<BR><B>描述:</B><BR><br>重启系统。

<HR>

<H2><A name=root>root</A></H2><B>用法: </B>root [DEVICE 
[HDBIAS]]<BR><B>描述:</B><BR><br>  
set the current "root device" to the device DEVICE, then attempt to mount it to get the partition size (for passing the partition descriptor in 'ES:ESI', used by some chain-loaded bootloaders), the BSD drive-type (for booting BSD kernels using their native boot format), and correctly determine the PC partition where a BSD sub-partition is located. the optional HDBIAS parameter is a number to tell a BSD kernel how many BIOS drive numbers are on controllers before the current one.for example, if there is an IDE disk and a SCSI disk, and you FreeBSD root partition is on the SCSI disk, then use a '1' for HDBIAS.
<p>
  <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置根分区。设置根分区为指定设备(DEVICE)，然后尝试挂接该分区以得到分区大小(用于在ES:ESI中传递，扇区链式启动方式要求这样)。BSD 驱动类型用于启动 BSD 的核心启动, 和确定 BSD 子分区所在的 PC 分区。<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可选的磁盘偏移参数， 用于 BSD 核心确定有多少个控制器在当前控制器前。比如: 假设同时有一个IDE和SCSI盘, 而BSD根分区在 SCSI盘上, 那么磁盘偏移就为1。
  </span></p><p>例如：  
  <blockquote>
    <p><span class="cmd">root  (hd0,0)/boot/grub</span>
    </p>
  </blockquote>
<p>这就指定了当前工作目录是(hd0,0)/boot/grub 因此所有继&quot;/...&quot;之后的文件名将实际提交到(hd0,0)/boot/grub/...</p>
<p>也就是说：</p>
<blockquote>
  <p><span class="cmd">cat  /menu.lst</span></p>
</blockquote>
<p>  将等同于</p>
<blockquote>
  <p><span class="cmd">cat  (hd0,0)/boot/grub/menu.lst</span></p>
</blockquote>
<p>另类用法：</p>
<blockquote>
  <p><span class="cmd">root endpart</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;切换到当前磁盘最后一个可用分区（注意仅对磁盘有效）</p>
<HR>

<H2><A name=rootnoverify>rootnoverify</A></H2><B>用法: </B>rootnoverify [DEVICE 
[HDBIAS]]<BR><B>描述:</B><BR><br>  
<span class="style1">similar to 'root', but don`t attempt to mount the partition. this is for when an OS is outside of the arer of the disk that GRUB can read, but setting the correct root device is sitll desired. note that the items mentioned in 'root' which derived from attempting the mount will NOT work correctly.</span>
<p class="style1">
  类似 'root' 指令, 但不测试安装该分区。这用于有些系统装在 GRUB 能访问的磁盘区之外, 但仍需要设置正确的根分区的情况。有些需要安装分区才能确定的参数可能会有问题。可参见 root 示例。
</p><HR>

<H2><A name=savedefault>savedefault</A></H2><B>用法: 
</B>savedefault [--wait=T] [NUM | 'fallback']<BR><B>描述:</B><BR><br>  
<span class="style1">save the current entry as the default boot entry if no argument is specified. if a number is specified, this number is saved.if 'fallback' is used, next fallback entry is saved. if T is not 0, prompt the user to confirm the write operation by pressing the Y key, and if no key-press detected within T seconds, the write will be discarded. </span>
<p><span class="style1">
  将当前项设置为默认的引导项。
  菜单中使用。如果没有指定参数的话将当前项菜单保存为默认项。<br>
  如果选择了这个启动
  项，那么下次启动时就用此项作为默认项。在前面设置为 default saved 时有效。
  </span>
<HR>

<H2><A name=serial>serial</A></H2><B>用法: </B>serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] 
[--stop=STOP] [--device=DEV]<BR><B>描述:</B><BR><br>  
<span class="style1">initialize a serial device.UNIT is a digit that specifies which serial device is used (e.g. 0 == COM1). if you need to specify the port number, set it by --port. SPEED is the DTE-DTE speed. WORD is the word length, PARITY is the type of partity, which is one of 'no', 'odd' and 'even'.STOP is the length of stop bit(s). the option --device can be used only in the grub shell, which specifies the file name of a tty device. the default values are COM1, 9660, 8N1.</span>
<p>
  初始化一个串口设备。</p>
<p><span class="Options">UNIT</span> 用于指定要使用的串口设备 (如，0 == COM1); </p>
<p><span class="Options">PORT</span> 用于指定端口号; </p>
<p><span class="Options">SPEED</span> 用于指定通讯的数率; </p>
<p><span class="Options">WORD</span> 为字长; </p>
<p><span class="Options">PARITY</span> 为奇偶类型(取 'no', 'odd' 和 'even' 之一的值。); </p>
<p><span class="Options">STOP</span> 是停止位的长度值; </p>
<p>选项 <span class="Options">--device</span> 仅用于命令行模式，用以指定 tty 设备的文件名。</p>
<p>默认值是这样的，COM1, 9600, 8N1。<BR>
  
</p>
<HR>

<H2><A name=set>set</A></H2>
<p><B>用法: </B>SET [variable=[string]]<BR>
<B>描述:</B></p>
<p>（by zxw@wuyou）<BR>
  <br>	
  set 命令主要用于显示、设置或删除变量</p>
</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;set设置变量的基本形式:SET [variable=[string]]</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">variable</span> 指定变量名（最长8个字符）。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">string</span> 指定要指派给变量的一系列字符串（最长512个字符）。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、不带参数的 SET 命令会显示当前变量。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、要删除某个变量，只需要让＝后面为空就可以</p>
<blockquote>
  <p><span class="cmd">set myvar=<br>
  </span>#将会删除变量myvar</p>
</blockquote>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、显示已使用的名称的所有变量的值。例如:</p>
<blockquote>
  <p><span class="cmd">set A</span><br>
    #会显示所有以A开头的变量，如果没有任何匹配返回0.</p>
</blockquote>
<p>
  
  &nbsp;&nbsp;&nbsp;&nbsp;注：1.使用和MSDOS一样的处理方法，一整行的命令会在执行前先进行变量替换。<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.变量名不允许使用非字母或_开头。否则你将无法访问你的变量。<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.长度限制请看前面说明。<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.输入"<span class="bat">set *</span>"可以清除所有已设置的变量。</p>
<p>    
&nbsp;&nbsp;&nbsp;&nbsp;使用set设置变量是批处理中一个重要的部分，一定好好把握。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;set设置的变量要用双%括起来引用，如要取消之前变量直接set 变量名=</p>
<p>
set 的参数</p>
<p>
&nbsp;&nbsp;<span class="Options">/a /A</span> 常用以计算赋值，/A 使用16进制数保存变量,/a 使用十进制数保存变量.<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;注意:目前只支持简单的整型数，只能从左至右进行计算。如果变量是字母或符号则错误。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;目前支持的运算符（也可参见 <a href="./GRUB4DOS3命令索引.htm#calc">calc 命令</a> 部分）：<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.基本运算符:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="bat">+ 加法</span>运算符。如 <span class="cmd">set /a a=3+7</span> 的值为10, <span class="cmd">set /A a=3+7</span> 的值为0xA</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">- 减法</span>运算符。如 <span class="cmd">set /a a=3-5</span> 的值为-2</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">* 乘法</span>运算符。如 <span class="cmd">set /a a=3*5</span> 的值为15</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">/ 取整</span>运算符。如 <span class="cmd">set /a a=3/5</span> 的值为0， <span class="cmd">set /a a=7/2</span> 的值为3</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">% 求余</span>运算符，或<span class="bat">模</span>运算符。如 <span class="cmd">set /a a=7%2</span> 的值为1</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.位运算符，位运算仅限于以二进制位为单位的整数运算。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">按位与 运算符 ( & )</span><br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) 运算规则 　 运算的两个二进制位值都为 1，结果才为1 <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) 举例 </p>
<blockquote>
  <blockquote>
    <p><span class="cmd">set /a a=3&5</span>的值为1</p>
  </blockquote>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">按位或 运算符 ( | )</span><br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) 运算规则 　　运算的两个二进制位值有一个为 1，结果就为1 <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) 举例 </p>
<blockquote>
  <blockquote>
    <p><span class="cmd">set /a a=3|5</span>的值为7</p>
  </blockquote>
</blockquote>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">按位异或 运算符 ( ^ )</span><br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) 运算规则 　　运算的两个二进制位值不同，结果为 1，否则结果为0 <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) 举例 </p>
<blockquote>
  <blockquote>
    <p><span class="cmd">set /a a=3^5</span>的值为6 </p>
  </blockquote>
</blockquote>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">按位左移 运算符 ( << )</span><br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1) 运算规则 <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整体左移，右补 0，左移出的高位丢弃 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;左移 1位，相当于乘2（高位未移出时） <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;左移 n位，相当于乘2的n方（高位未移出时）<br>
<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2) 举例 </p>
<blockquote>
  <blockquote>
    <p><span class="cmd">set /a a=1<<1</span>的值为2</p>
  </blockquote>
</blockquote>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="bat">按位右移 运算符 ( >> )</span><br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)  运算规则 　 整体右移，左补 0/1，右移出的低位丢弃右移 1位，<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相当于除2（低位未移出时）右移 n位，相当于除2的n方（低位未移出时） <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)  举例 </p>
<blockquote>
  <blockquote>
    <p><span class="cmd">set /a a=5>>2</span>的值为1 </p>
  </blockquote>
</blockquote>
<p>
&nbsp;&nbsp;<span class="Options">/P</span> 设置与用户的交互输入开关：</p>
<blockquote>
  <p><span class="cmd">set /p var=Please input:</span><br>
    ::提示 Please input，暂停执行等待用户输入<br>
    <span class="cmd">echo %var%</span><br>
    :: "提示"不作变量的值，var的值为用户输入    <br>
    <span class="cmd">pause</span></p>
</blockquote>
<p>
&nbsp;&nbsp;<span class="Options">/l /u</span> 将变量中的字母转换为小写或大写。</p>
<blockquote>
  <p>如<span class="cmd">set /l a=Abcd</span>，a的值为abcd. 
  </p>
</blockquote>
<p>
<HR>

<H2><A name=setkey>setkey</A></H2><B>用法: </B>setkey [TO_KEY 
FROM_KEY]<BR><B>描述:</B><BR><br>  
<span class="style1">change the keyboard map. the key FROM_KEY is mapped to the key TO_KEY.a key must be an alphabet, a digit, or one of these:escape, exclam, at, numbersign, dollar, percent, catet, ampersand, asterisk, parenleft, parenright, minus, underscore, equal, plus, backspace, tab, bracketleft, braceleft, bracketright, braceright, enter, control, semicolon, colon, quote, doublequote, backquote, tilde, shift, backslash, bar, comma, less, period, greater, slash, question, alt, space, capslock, FX (X is a digit), and delete. if no argument is specified, reset key mapping.</span>
<p>&nbsp;</p>
<p>
  改变键盘映射关系。把FROM_KEY映射为TO_KEY。这里的键必须是字母, 数字, 和以下特殊键: </p>
<p>
  escape(转义), exclam(!), at(@), numbersign(#), dollar($), parenright ()) , caret(^), </p>
<p>
  ampersand(&), asterisk(*), plus(+), percent(%), minus(-), underscore(_), equal(=), </p>
<p>
  parenleft[(], backspace(退格), tab(制表), bracketleft([), braceleft({), bracketright(]), </p>
<p>
  braceright(}), enter(回车), control(控制), semicolon(;), colon(:), quote('), doublequote("), </p>
<p>
  slash(/), backquote(`), tilde(~), shift(换档), backslash(\), bar(|), comma(,), less(<), </p>
<p>
  period(.), greater(>), question(?), alt(交互), space(空格), capslock(大写), Fx(功能键) </p>
<p>
  和 delete(删除)。
<BR>
<HR>

<H2><A name=setvbe>setvbe</A></H2><B>用法: </B>setvbe [MODE_3D]<BR><B>描述:</B><BR><br>  
<span class="style1">set the VBE mode MODE_3D(which is of the form 1024*768*32) for each subsequentkernel command-line. if no argument is specified, clear(nullify, incalidate) the video option string setup by the previous setvbe command. </span>
<p>setvbe 是一个新的命令，它可以在系统核心运行前被用来改变视频模式。</p>
<p> 例如，你可以执行</p>
<blockquote>
  <p><span class="cmd">setvbe 1024x768x32</span></p>
</blockquote>
<p><br>
这会扫描出其可用模式的列表并设置它，并且自动在随后的每个kernel命令行中增加一个选项'<span class="Options">video=</span>'。</p>
<p>增加的选项'video='类似于：</p>
<blockquote>
  <p><span class="cmd">video=1024x768x32@0xf0000000,4096</span></p>
</blockquote>
<p>这里的0xf0000000是vbe报告的视频模式的帧缓存地址，而4096是扫描线的字节大小。<br>
<span class="style1">如果你想在你的操作系统上获得一些图形支持，但是除了只写一个像素点到视频内存而外，你却不想使用任何视频功能，这确实有用。</span></p>
<HR>

<H2><A name=shift>shift</A></H2>
<p><B>用法: </B>shift<BR>
  <B>描述:</B><BR><br>  
批处理专用。语法和MS-DOS几乎相同。</p>
<p>注意：grub4dos中可以使用 %1～%9 参数，但 %9 参数与 MS-DOS 中参数有区别， grub4dos中 %9 指剩下的所有参数。</p>
<p>转帖教程：</p>
<p> <br>
一些初学者朋友对于shift命令感到非常的困惑，抱怨网上的一些shift命令教程很难理解。</p>
<p>为了解决这个问题，于是我就写了一下这个&ldquo;超生游击队&rdquo;教程以供初学者朋友参考。</p>
<p>言归正传，比如我老爸有10个儿子，我英雄是第10个。</p>
<p>第一步：<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;我们现在用一个另类的办法输出10个儿子的名字，将如下代码保存为<span class="bat">hero.bat</span>。</p>
<blockquote>
  <p><span class="bat">@echo off<br>
    echo %1<br>
    echo %2<br>
    echo %3<br>
    echo %4<br>
    echo %5<br>
    echo %6<br>
    echo %7<br>
    echo %8<br>
    echo %9<br>
    echo %10<br>
    pause</span></p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如何运行呢？我们可以另写一个bat，内容是：<span class="cmd">call hero.bat 老大 老二 老三 &hellip;&hellip; 英雄</span><br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;也就是调用hero.bat并共带10个参数！<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;能正确运行吗？不能，很遗憾，因为根本没有%10。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">注</span>：在grub4dos中执行本示例批处理时会成功执行，显示10个人名。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因grub4dos中 %9 代表剩余的所有参数，本例用来帮助大家理解 shift 命令，勿怪。<br>
  <br>
  第二步：<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;在上一步中没有输出我英雄的大名，那难道我英雄就不是我老爸的儿子吗！我得想个办法把我的名字也输出来。<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;好了，借助shift命令就可以达到。我们把hero.bat中的代码改一下。</p>
<blockquote>
  <p class="bat">@echo off<br>
    echo %1<br>
    echo %2<br>
    echo %3<br>
    echo %4<br>
    echo %5<br>
    echo %6<br>
    echo %7<br>
    echo %8<br>
    echo %9<br>
    shift<br>
    echo %9<br>
    pause</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;终于我的大名输出了。可是英雄明明是第10个参数呀，怎么现在变成第9个了？这个就是shift的功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;也就是，执行shift命令以后，原来的%9变成了%8，原来的%8变成了%7，原来的%7变成了%6&hellip;&hellip;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;而原来的%1变成了%0，此时原来的%0没了。<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;也就是说后面的参数依次冲掉了前面的参数，而为了输出我的名字，最终牺牲了%0。<br>
  <br>
第三步：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;我老爸又认了4个干儿子，名字分别为a,b,c,d，到此，我老爸有多了4个干儿子。共14个儿子。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在调用hero.bat时又多了4个参数，则运行hero.bat时有：<span class="cmd">call hero.bat 老大 老二 老三 &hellip;&hellip; 英雄 a b c d</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（注意：要把省略号换成名字。）<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;此时，hero.bat的代码如下：（最容易理解的方法）</p>
<blockquote>
  <p><span class="bat">@echo off<br>
    echo %1<br>
    echo %2<br>
    echo %3<br>
    echo %4<br>
    echo %5<br>
    echo %6<br>
    echo %7<br>
    echo %8<br>
    echo %9<br>
    shift<br>
    echo %9</span><br>
  ::现在的%9是英雄</p>
  <p><span class="bat">shift<br>
    echo %9</span><br>
  ::现在的%9是a</p>
  <p><span class="bat">shift<br>
    echo %9</span><br>
  ::现在的%9是b</p>
  <p><span class="bat">shift<br>
    echo %9</span><br>
  ::现在的%9是c</p>
  <p><span class="bat">shift<br>
    echo %9</span><br>
  ::现在的%9是d</p>
  <p class="bat">pause</p>
</blockquote>
<HR>

<H2><A name=splashimage>splashimage</A></H2><B>用法: </B>splashimage FILE<BR><B>描述:</B><BR><br>  
load FILE as the background image when in graphics mode. </p>
<p>
图形模式下载入背景图片文件。需使用使用640&times;480分辨率的 xpm 图片。
<p> 0.4.5版grub4dos增加800&times;600分辨率支持，默认640&times;480分辨率。</p>
<p>使用800&times;600分辨率图片需提前使用 graphicsmode 命令更改分辨率。</p>
<p> xpm 图片制作可见 <a href="http://bbs.wuyou.com/viewthread.php?tid=183783" target="_blank">http://bbs.wuyou.com/viewthread.php?tid=183783</a> by 古豆</p><HR>

<H2><A name=terminal>terminal</A></H2><B>用法: </B>terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]<BR><B>描述:</B><BR><br>   
<span class="style1">select a terminal. when multiple terminals are specified, wait until you push any key to continue. if both console and serial are specified, the terminal to which you input a key first will be selected. if no argument is specified, print current setting. the option --dumb specifies that your terminal is dumb, otherwise, vt100-compatibility is assumed. if you specify --no-echo, input characters won`t be echoed. if you specify --no-edit, the BASH-like editing feature will be disabled. if --timeout is present, this command will wait at most for SECS seconds. the option --lines specifies the maximum number of lines. the option --silent is used to suppress messages.</span>
<p>&nbsp;</p>
<p>
   <span class="style1">terminal 命令用以确定终端模式。当指定了多个终端以后, 按任意键方可继续操作。如果控制台和串口都被指定了, 那么你首先在其中按下键盘的终端将被首先选中。如果没有指定任何参数, 那么此命令将显示出当前的终端设置; 常用参数是console 和 graphcis ,以及 serial 。</span></p>
<p>terminal<span class="Options"> console</span> 将使终端显示模式改变为默认的控制台模式，即默认的文本模式。<br>
  <br>
  如果需要返回图形模式，可以使用terminal <span class="Options">graphics</span> 。</p>
<p>参数 <span class="Options">--dumb</span> 用以指定一个哑终端, 否则即为 vt100 兼容型; </p>
<p>若使用了 <span class="Options">--no-echo</span> 参数, 屏幕上将不会回显输入的字符; </p>
<p>若使用了 <span class="Options">--no-edit</span> 参数, the BASH-like 的编辑功能将被禁用; </p>
<p>若使用了 <span class="Options">--timeout</span> 参数, 该命令将等待数秒钟(由SECS指定); </p>
<p>可使用 <span class="Options">--lines</span> 指定最大的行数; </p>
<p>可使用 <span class="Options">--silent</span> 选项关闭消息显示。</p>
<HR>

<H2><A name=terminfo>terminfo</A></H2><B>用法: </B>terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ] [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]<BR><B>描述:</B><BR><br>  
<span class="style1">define the capabilities of your terminal. use this command to define escape sequences, if it is not vt100-compatible. you may use \e for ESC and ^X for a control character. if no option is specified, the current setting are printed.</span>
<p>
指定终端的功能。如果此终端为 vt100 兼容型的，则可指定换码顺序 (即使用 \e 代表 ESC, ^X　代表控制码); </p>
<p>在未给任何参数的情况下，将给出当前配置信息。<BR>
</p>
<HR>

<H2><A name=testvbe>testvbe</A></H2><B>用法: </B>testvbe MODE<BR><B>描述:</B><BR><br> 
 test the VBE mode MODE. hit any key to return.</p>
<p>
  测试所指定(MODE)的 VBE 模式。
<BR>

<HR>

<H2><A name=timeout>timeout</A></H2><B>用法: </B>timeout SEC<BR><B>描述:</B><BR><br>
设置在自动启动缺省菜单前所等待的秒数。超时后，将启动默认菜单项。菜单头部使用，不能用于菜单项中。
<HR>

<H2><A name=title>title</A></H2><B>用法: </B>title [NAME 
...]<BR><B>描述:</B><BR><br>
命名菜单项。即加载菜单后菜单项的显示名（菜单标题）。在文本模式（非gfxmenu等图形模式）的菜单显示模式下<br>

<p>可以在显示名后使用<span class="Options"> \n</span> 添加该项菜单的注释信息（多余一行的注释信息可以使用 \n\r 来换行输出）。</p>
<p> 例：</p>
<blockquote>
  <p><span class="Options">title</span><span class="bat"> xp</span><span class="Options"> \n</span><span class="bat"> start xp</span><span class="Options"> \n\r</span><span class="bat">find and start /ntldr</span></p>
</blockquote>
<p> #菜单加载后，该项菜单标题为 xp ，</p>
<p>#光标选中该项菜单时，屏幕底部的注释信息第一行显示为 start xp ， 第二行显示为 find and start /ntldr。</p>
<p> 注意：若想使用中文注释信息需提前加载中文支持。</p>
<HR>

<H2><A name=tpm>tpm</A></H2><B>用法: </B>tpm --init<BR><B>描述:</B><BR><br>
initialise TPM.</p>
<p>
	"tpm --init"在地址0000:7c00处使用512字节数据作为初始化TPM（可信赖平台模块）的缓存。</p>
<p>

	在你引导 VISTA 的 BOOTMGR 前，你可能需要在一些机器上使用"tpm --init"。</p>
<p>通常你应该在一条 CHAINLOADR 命令后执行"tpm --init"指令。</p>
<HR>

<H2><A name=unhide>unhide</A></H2><B>用法: </B>unhide 
PARTITION<BR><B>描述:</B><BR><br> 
unhide PARTITION by clearing the "hidden" bit in its partition type code. </p>
<p>
the default partition is the current root device.</p>
<p>
通过清除隐藏标志，解除指定分区(PARTITION)的隐藏。与 hiddenflag 命令类似，
<p>但 unhide 命令只能用来显现分区，可以省略 PARTITION 参数，此时认为 PARTITION 是当前的 root 设备。
<p> 例：</p>
<blockquote>
  <p><span class="cmd">unhide (hd0,0)<br>
  </span>#显现第一硬盘第一主分区</p>
</blockquote>
<HR>

<H2><A name=uuid>uuid</A></H2><B>用法: </B>uuid [DEVICE] [UUID]<BR><B>描述:</B><BR><br>  
<span class="style1">if DEVICE is not specified, search for filesystem with UUID in all partitions and set the partition containing the filesystem as new root(if UUID is specified), or just list uuid`s of all filesystems on all devices(if UUID is not specified). if DEVICE is specified, return ture or false according to whether or not the DEVICE matches the specified UUID(if UUID is specified), or just list the UUID of DEVICE(if UUID is specified).</span>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;确认分区的新命令</p>
<p>
1、如果 <span class="Options">DEVICE</span> 选项未被指定，将在所有分区中搜索指定的 uuid 号的文件系统，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;然后把包含这个文件系统的分区设置为新的根 （如果 UUID 被指定时），</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;或者只列举所有设备上的文件系统的 uuid 号（如果 UUID 未被指定时）。</p>
<p><br>
  2、如果 <span class="Options">DEVICE</span> 选项被指定了，将返回 真 或 假 ，对应于指定的设备是否与指定的 uuid 号相符（如果UUID被指定时），</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;或者仅仅列举指定设备的uuid 号（UUID 未被指定时）。</p>
<p>
示例 1：</p>
<blockquote>
  <p><span class="cmd">find --set-root uuid () 7f95820f-5e33-4e6c-8f50-0760bf06d79c<br>
  </span>#这将查找 uuid 等于 7f95820f-5e33-4e6c-8f50-0760bf06d79c的分区，然后将这个找到的分区设置为根。</p>
</blockquote>
<p>示例 2：</p>
<blockquote>
  <p><span class="cmd">uuid 7f95820f-5e33-4e6c-8f50-0760bf06d79c<br>
  </span>#这条命令将取得和示例1同样的效果</p>
</blockquote>
<p>示例 3：</p>
<blockquote>
  <p><span class="cmd">uuid ()<br>
    </span>这将显示当前根设备的 uuid 号。
    <BR>
  </p>
</blockquote>
<HR>

<H2><A name=vbeprobe>vbeprobe</A></H2><B>用法: </B>vbeprobe [MODE]<BR><B>描述:</B><BR><br> 
probe VBE information. if the mode number MODD is specified, show only the information about only the mode.</p>
<p>
  侦测 VBE 的信息。如果指定了一个模式(MODE 不为空)，则仅显示其信息。<BR>
<HR>

<H2><A name=write>write</A></H2><B>用法: </B>write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING<BR><B>描述:</B><BR><br>   
write a 32-bit value to memory or write a string to file(or device!).</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用 'write' 命令将字符串写入设备或文件中</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">SKIP</span> 是一个整数，默认值是 0 。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果 <span class="Options">ADDR_OR_FILE</span> 选项被指定为一个整数，那么它被作为一个内存地址对待，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;并且 <span class="Options">INTEGER_OR_STRING</span> 选项也必须是一个整数值。整数 INTEGER_OR_STRING 将被写入</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（ADDR_OR_FILE 加上 SKIP 值）的地址处。</p>
<p>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果 ADDR_OR_FILE选项 指定的是一个设备或一个文件，那么INTEGER_OR_STRING 选</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;项将被作为一个字符串对待，它将被写入跳过 SKIP 个字节（字节计数）的指定的设备或文件当中。</p>
<p>&nbsp;</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;注：1、字符串不需要被引用，也就是说，不需要单引号(') 也不用 双引号(") 来引用它。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、空格符不需要使用反斜杠(\)引用。但如果字符串以空格开头，开头的这个空格符还是需要反斜杠引用。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、单引号(')和双引号(")不用特别说明并且可以直接使用到字符串中。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、下面是一些 C 语言风格的引用序列说明：</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\NNN	（1到3位）八进制值 NNN 表示的字符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\	反斜杠<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\a	警报 （声音）<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\b	退格符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\f	换页符 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n	换行符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r	回车符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t	水平制表符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\v	垂直制表符<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xHH	（1到2位）十六进制值为 HH 的字节</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;注意：1、就像 dd 命令一样，write 命令既不扩大也不缩小目标文件的文件大小，字符串的剩余部分将被丢弃。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;目标文件也不能是一个压缩过的文件。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、还是和 dd 类似，write 命令也具有危险性，使用风险你自己承担。作为一种安全方面的考虑，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你应当只向内存中的文件写入。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、某些情况下当写入 NTFS 中的文件时，write命令可能失败。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、0.4.5版grub4dos不再限制在菜单中执行 write 命令来写入一个不是内存中的设备或者块文件。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;!!!!    Caution! The file to write can be a device name which stands&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;!!!!    for all the sectors on the device. Take utmost care!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;!!!!__________________________________________________ !!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br>
&nbsp;&nbsp;&nbsp;&nbsp;警告！被write 命令写入的文件可以是一个设备名，即它代表了设备上的所有扇区。慎之又慎！
<BR></BODY></HTML>
